SpringBoot
2021-04-22 11:33:54 20 举报
AI智能生成
登录查看完整内容
SpringBoot入门使用,整合mybatis,thymeleaf,扩展定时任务,异步任务,邮件发送,短信发送
作者其他创作
大纲/内容
SpringBoot
第一个springbooot项目
新建一个springboot项目
完善项目结构
强迫症不喜欢多余的文件,该删删,删成这样就行了
一个标准的web应用目录结构
小彩蛋
启动项目控制台的输出是这样的
resource目录下新建banner.txt,输入你想要的效果
编写测试controller
pre style=\
还有一个规范点:springboot的配置文件官方建议使用yaml,而不是properties
yaml的语法:以b style=\
key:(空格)value
yaml的强大之处在于可以给实体类赋值
定义实体类
这里会爆红,pom.xml引入一个依赖就可以解决了,不引入也不影响运行
编写yaml
⭐yaml对空格要求极为严格
启动项目,请求接口,看看是否成功输出HelloWorld
初探原理
maven项目我们当然要先看pom.xml文件
我们发现这个项目依赖父项目
再往上还有一个父项目
这里才是springboot的控制中心,所有的依赖版本都在这里了
启动器:spring-boot-starter
springboot-boot-starter-xxx:就是spring-boot的场景启动器
spring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件;
springboot把所有的功能场景抽离出来形成一个个starter(启动器)
只需要引入需要的starter,springboot就会帮我们引入相关的依赖
我们再来看主启动类
我们分析一下这个主程序启动类中唯一的注解:@SpringBootApplication
追进这个注解发现这里面还有很多别的注解,我们找几个重要的看
@SpringBootConfiguration
SpringBoot的配置类 ,标注在某个类上 , 表示这是一个SpringBoot的配置类;
继续追进去
@Configuration说明这是一个配置类
@EnableAutoConfiguration
springboot开启自动配置功能
@AutoConfigurationPackage:自动配置包
@Import({Registrar.class}):这是把主程序所在包及其子包的所有bean加载到spring容器中
@Import({AutoConfigurationImportSelector.class}):给容器导入组件
AutoConfigurationImportSelector :自动配置导入选择器
追进去会发现几个重要的方法
这里调用了SpringFactoriesLoader类的静态方法loadFactoryNames
我们再来看一下这个spring.factories
这里面都是一个个的自动配置文件,里面找个认识的追进去会发现是java配置类
所以springboot的自动装配是从classpath中搜寻所有的META-INF/spring.factories配置文件,通过反射获取实例注入到IOC容器中的
得到结论
springboot启动时从类路径/META-INF/spring.properties中读取EnableAutoConfiguration指定的值
把这些值的自动装配类导入容器,自动装配类就生效了
整个javaee的整体解决方案和自动装配都在springboot-autoconfiguration的jar包中
有了自动装配类,就免去了我们手动配置、注入功能组件的操作
纵向观察
yaml
yaml配置类中可以设置的属性值都是XXXAutoConfiguration自动类中的属性
XXXAutoConfiguration自动类
这些都是java配置类,如果yaml中没有配置属性,就从XXXPeoteries文件中读取默认值
XXXPeoteries
这里存放的都是Java配置类中的默认属性值
@ComponentScan
自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中
最后看下SpringApplication.run()
这个类主要做了以下四件事情
推断应用的类型是普通的项目还是Web项目
查找并加载所有可用初始化器 , 设置到initializers属性中
找出所有的应用程序监听器,设置到listeners属性中
推断并设置main方法的定义类,找到运行的主类
查看类构造器
web开发:网站开发走起
首先创建一个项目,不必多说
然后我们解决一下静态资源导出问题
webjars(这个只是简单说一下,我们使用下面那种方式)
通过导入maven的方式
映射到localhost:8080/webjars/
public / static / resources
映射到localhost:8080/
优先级
resources > static(默认) > public
⭐扩展装配springmvc
新建MyMvcConfig实现WebMvcConfigurer接口
⭐添加@Configuration注解
⭐一定不要添加@EnableWebMvc
这个注解会使自动装配失效
原理
观察WebMvcAutoConfiguration自动装配类
而我们再看看这个@EnableWebMvc注解
它实际上是导入了DegatingWebMvcConfiguration类,我们追进去
直接发现这个东西继承了WebMvcConfigurationSupport
简单设计一下首页
创建首页index,放在静态资源目录下(templates )
引入thymeleft模板引擎
导入依赖
引入头文件
templates里的html页面都需要通过controller返回
⭐但是首页根资源我们使用springmvc配置映射
配置首页映射(重写addViewControllers方法)
只要路径地址是/,就会映射到index
首页找个bootstrap的模板吧,记得下载css网址:https://getbootstrap.com/docs/4.0/examples/
整个国际化,显得高大上
首先保证我们开发环境是基于UTF-8的
建立资源目录---i18n(Internationalization的简写,还有个相同的k8s)
创建配置文件
zh_CN中文,en_US英文
采用可视化配置
首先打开可视化配置界面
开始配置
配置application.yaml
spring.message.basename: i18n.login
使用#{ }在html页面取值
button元素和其他的不同
配置自己的地区化解析器
新建MyLocaleResolver类实现LocaleResolver接口
把自定义的地区化解析器配置到springmvc中,通过构造函数实现自动装配
html页面的切换按钮,携带参数跳转
实现登录功能
html页面表单提交地址
<form class=\"form-signin\" th:action=\"@{/login/toHome}\">
controller控制是否登录成功,新建controller
重定向的视图映射
重定向到主页面后,我们发现不需要账户名和密码,直接url栏访问主页面也可以,所以我们配置拦截器
首先创建LoginHandlerInterceptor类实现HandlerInterceptor接口,实现pre方法
然后通过springmvc扩展类装配
实现注销功能
登录后我们在登录的controller里添加一个注销方法,很简单,就是单纯的去除session
抽离出页面多次使用的代码形成组件,实现代码复用(使用th:freagment和th:replace)
抽离代码形成组件
实现复用
组件间通信
错误页面,直接在templates目录下建一个error文件夹,里面新建404、500等错误页面,springboot会帮我们自动找到这些页面
然后CRUD就不必多说了吧,我们现在有大概模板了,上数据库
pom导入druid依赖(因为druid集成了后台监控,我们试试这个东西)
application.yaml进行配置
编写配置类
@Configuration声明配置类,@Bean交给Spring接管
配置成功就能进入这样的后台页面(别人写好的,我们直接使用就好)
整合mybatis
导入整合包依赖
更改一下druid的版本,因为localdate的问题,遇到的一个坑,希望大家不要浪费时间在这
配置springmvc.config(其实我知道这样是不标准的,因为明明yuml中有配置信息,为什么还手写呢?因为我拿不出来yuml的数据,。。。。。。。)
创建mapper,这个我们放在classpath:mybatis/mapper下
目录结构
mapper文件
配置yuml的mybatis相关配置项(别名以及扫描包)
编写mapper的dao层接口
现在加上service接口和实现类,配合controller就可以快乐的CURD了
扩展功能
安全扩展(认证、授权)
⭐SpringSecurity
shiro
swagger接口文档
添加pom依赖
启动类添加@EnableSwagger2注解开启swagger
项目启动后,输入localhost:8080/swagger-ui.html就可以访问默认界面了
⭐这个功能在项目上线后必须关闭,它不仅会暴露接口造成风险,还会降低性能
异步任务(比如后台响应需要时间,但是前台等待会影响体验)
在需要异步处理的方法上加上@Async注解
在主启动类上添加@EnableAsync注解开启异步功能
邮件发送
邮箱开启smtp,获得授权码
配置yml文件
编写测试代码(需要用到JavaMailSenderImpl类,我们用spring的自动装配实现)
简单文本直接发送SimpleMailMessage对象
代码
注意点
简单邮件电脑端不支持html解析,想要支持html解析就使用MimeMessage
其实,手机是支持html标签解析的,但是建议不要使用了,毕竟官方建议需要html解析使用MimeMessage
带附件传送,可解析htmlMimeMessage对象是邮件的基本内容,需要MimeMssageHelaper组装发送
短信发送(我选择使用阿里云的服务【大鱼】)
登录阿里云大鱼平台,开通短信服务,新人有使用,可以领取测试https://dayu.aliyun.com/
进入控制台,右上角头像悬浮鼠标,创建AccessKey
添加签名
定时任务
在需要异步处理的方法上加上@Schdule(cron = \"秒 分 时 日 月 星期\")注解
大家需要去了解一下cron表达式
在主启动类上添加@EnableSchdule注解开启异步功能
测试
0 条评论
回复 删除
下一页