Spring Boot

14-springboot系列: 邮件发送

隐身守侯 提交于 2020-12-18 03:17:19
今天讲解springboot的 spring-boot-starter-mail 邮件发送,业务场景: 注册验证,忘记密码或者是给用户发送营销信息 等。 1、pom配置 < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-mail </ artifactId > </ dependency > </ dependencies > 2、application.propertis配置邮箱 #邮箱服务器地址 spring.mail.host=smtp.163.com #用户名 spring.mail.username= z13128600812@ 163 .com #开通授权码 spring.mail.password=********** spring.mail. default -encoding=UTF- 8 spring.mail

补习系列(12)-springboot 与邮件发送

我怕爱的太早我们不能终老 提交于 2020-12-18 03:03:42
一、邮件协议 在谈谈代码之前,先来了解下邮件的基本协议。 电子邮件协议是基于TCP层定义的,主要有下面几个: SMTP协议 SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议,是发送协议。 它定义了一组从源地址到目的地址传输邮件的规范,并支持在传送过程中通过不同网络主机实现中转及传送。 POP3协议 POP3是 Post Office Protocol 3 的简称,属于接收协议,POP3是即POP(邮局协议)的第3个版本,也是因特网电子邮件的第一个离线协议。 它规定了终端如何接入远程的邮件服务器并下载电子邮件。 IMAP协议 IMAP的全称是 Internet Mail Access Protocol ,即交互式邮件访问协议,是一种支持同步接收的协议。 该协议由斯坦福大学在1986年研发,目前是最流行的邮件收取功能协议。 开启IMAP功能之后,电子邮件客户端可同步接收服务端的邮件,无论在客户端还是服务端上的操作都会反馈到另一方,比如删除、标记等; 此外IMAP还支持只对选中的部分邮件进行收取,这在POP协议上是做不到的。 关于数据传输 大多人都知道,电子邮件的传输采用了 Base64编码 对邮件内容进行包装,这是一种基于64个可打印字符来表示二进制数据的方法。 如上是Base64编码的字符映射表,64个字符可对应6个bit位。

补习系列(2)-springboot mime类型处理

巧了我就是萌 提交于 2020-12-18 02:54:29
目标 了解http常见的mime类型定义; 如何使用springboot 处理json请求及响应; 如何使用springboot 处理 xml请求及响应; http参数的获取及文件上传下载; 如何获得原始请求的字节流; 6.了解springboot 如何实现内容转换; 一、关于MIME MIME 的全称是Multipurpose Internet Mail Extensions,即多用途互联网邮件扩展,尽管读起来有些拗口,但大多数人可能都知道, 这是HTTP协议中用来定义文档性质及格式的标准。 IETF RFC 6838 ,对HTTP传输内容类型进行了全面定义。 而 IANA (互联网号码分配机构)是负责管理所有标准MIME类型的官方机构。可以 在这里 )找到所有的标准MIME 服务器通过MIME告知响应内容类型,而浏览器则通过MIME类型来确定如何处理文档; 因此为传输内容(文档、图片等)设置正确的MIME非常重要。 通常Server会在HTTP响应中设置 Content-Type ,如下面的响应: HTTP/1.1 200 OK Server: Golfe2 Content-Length: 233 Content-Type: application/html Date: Sun, 28 Dec 2018 02:55:19 GMT 这表示服务端将返回html格式的文档

springboot 整合redis

五迷三道 提交于 2020-12-18 01:29:38
springboot整合redis官方是有文档的: 英文看不懂可以翻译,代码应该看得懂, 这个是自动注入的。当然也可以xml注入,手动配置。 整合步骤: pom文件: <!-- spring boot web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId>

Spring 中 @Component、@Service 等注解如何被解析?

守給你的承諾、 提交于 2020-12-18 01:22:51
作者:温安适 来源:http://8rr.co/EjqL 前言 @Component和@Service都是工作中常用的注解,Spring如何解析? 1.@Component解析流程 找入口 Spring Framework2.0开始,引入可扩展的XML编程机制,该机制要求XML Schema命名空间需要与Handler建立映射关系。 该关系配置在相对于classpath下的/META-INF/spring.handlers中。 如上图所示 ContextNamespaceHandler对应context:... 分析的入口。 找核心方法 浏览ContextNamespaceHandler 在parse中有一个很重要的注释 // Actually scan for bean definitions and register them. ClassPathBeanDefinitionScanner scanner = configureScanner(parserContext, element); 大意是: ClassPathBeanDefinitionScanner#doScan是扫描BeanDefinition并注册的实现 。 ClassPathBeanDefinitionScanner 的源码如下: protected Set<BeanDefinitionHolder>

springboot整合redis

白昼怎懂夜的黑 提交于 2020-12-18 01:18:21
springboot通常整合redis,采用的是RedisTemplate的形式,除了这种形式以外,还有另外一种形式去整合,即采用spring支持的注解进行访问缓存 。 》准备工作 pom.xml文件: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>RELEASE</version> </dependency> application.properties配置文件: 来源: oschina 链接: https://my.oschina.net/u/3611008/blog

springboot|springboot配置拦截器

拜拜、爱过 提交于 2020-12-17 23:19:47
springboot配置拦截器 在springboot中配置拦截器大体上分为以下几步 1.引入相关的依赖 2.新建拦截器 3.配置拦截器Bean 虽然网上有很多配置方法,但是我更倾向于官方文件的配置方法,在以后的DEMO中也会是尽量和官方文档进行贴合 参考文档:https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/web.html#mvc-config-interceptors 引入依赖 只需要引一个web的依赖就可以了 implementation 'org.springframework.boot:spring-boot-starter-web' 新建拦截器 如果不知道如何新建,可以参考Spring源码中的LocaleChangeInterceptor /** * 测试拦截器,继承的类参考 Spring源码中LocaleChangeInterceptor * 和ThemeChangeInterceptor写法 * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/ public class TestInterceptor extends HandlerInterceptorAdapter { /** *

2020这一年总结出来的Java面试题,常频面试题大汇总~

≡放荡痞女 提交于 2020-12-17 21:33:43
面试就是大家身边总是存在各种各样的可能,而自身又具备这样的能力,就忍不住想试一试,尤其是到了年关,是一个好的蓄势并且认真积累的阶段。当然面试套路众多,但对于技术面试来说,主要是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。 “面试造火箭,工作拧螺丝”首先咱得能拧,才有造火箭的可能啊,这一年整理很多面试的高频问点也做了解析,今天在这分享给大家! 博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的。 需要本资料全部面试题的,可以点击这里!!暗号ky! Java语法基础 1.面向对象和面向过程的区别 面向过程 优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗 资源;比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是 最重要的因素。 缺点: 没有面向对象易维护、易复用、易扩展 面向对象 优点: 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特 性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 缺点: 性能比面向过程低 Java 语言有哪些特点 1. 简单易学; 2. 面向对象(封装,继承,多态); 3. 平台无关性( Java 虚拟机实现平台无关性); 4. 可靠性; 5. 安全性; 6. 支持多线程( C++ 语言没有内置的多线程机制

我设计了一个牛逼的本地缓存!

百般思念 提交于 2020-12-17 20:54:24
点击上方 java项目开发 , 选择 设为星标 优质文章,及时送达 -- 作者:ksfzhaohui http://dwz.win/Ws4 最近在看Mybatis的源码,刚好看到缓存这一块,Mybatis提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存,基本上满足了一个缓存该有的功能;当然如果拿来和专门的缓存框架如ehcache来对比可能稍有差距;本文我们将来整理一下实现一个本地缓存都应该需要考虑哪些东西。 考虑点 考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,下面我们来详细的介绍每个考虑点,以及该如何去实现; 1.数据结构 首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用Map来存储数据;或者复杂的如redis一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构; 2.对象上限 因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如1024,当达到某个上限后需要有某种策略去删除多余的数据; 3.清除策略 上面说到当达到对象上限之后需要有清除策略,常见的比如有LRU(最近最少使用)、FIFO(先进先出)、LFU(最近最不常用)、SOFT(软引用)、WEAK(弱引用)等策略; 4.过期时间 除了使用清除策略,一般本地缓存也会有一个过期时间设置

9年技术面试官讲解:计算机专业应届生怎样写简历

ぃ、小莉子 提交于 2020-12-17 19:29:56
本人作为面试官,也有过校招经历。在这过程中,发现有些毕业生同学的简历无法证明自己能胜任程序员的工作,甚至也没有面试价值。同时,本人也见识了不少“一看就想留下”的简历。在本文里,就将用正反两方面的实例,告诉广大计算机专业的毕业生朋友,简历该怎么写。 1、得不到面试机会的简历长什么样? 先来看份简历,其中的问题比较典型,在其中没有面试官感兴趣的内容。 可能这份简历比较夸张,但有不少简历或多或少会出现类似的问题。 第一个问题,缺乏商业项目开发经验的描述。换位思考下,公司要的人,最好有实际项目经验,对毕业生而言,这块标准可以降低为“具有一定的编程能力”,在这份简历中,能给出的这方面证据不多,虽然介绍了得到的计算机证书,也有给出了编程获奖经历,甚至也介绍了毕业设计,但从面试官角度来看,很缺乏实际商业项目经验。如果这批收到的简历中,大多数简历都这样,都没有包含实际的商业项目经验,或许这份简历还能凭借编程获奖等亮点得到面试机会。相反,如果这份简历的主人学校一般,而且还是专科,那么恐怕很难得到面试机会。 第二个问题,亮点不直接,且缺乏客观证据。比如这份简历中,通过获奖情况来说明自己编程能力强,通过大学课程来介绍自己的能力,这些点都不直接,而且口说无凭。在简历筛选阶段,面试官要在短时间内阅读大量简历,像这类简历,不能直接让面试官留下深刻印象,那么恐怕很难得到面试机会。 第三个问题,喧宾夺主