SpringBoot
SpringBoot原理初探
狂神说:狂神说SpringBoot02:运行原理初探 (qq.com)
yaml配置注入
代替@value赋值法
语法对比
properties与yaml
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
-
application.properties
-
- 语法结构 :key=value
-
application.yaaml
-
- 语法结构 :key:空格 value
xml与yaml
传统xml配置:
yaml配置:
yaml基础语法
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
4、要与实体类的属性对象名一一对应
注意:
-
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 :name: "kuang \n shen" 输出 :kuang 换行 shen
-
'' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen
对象、Map(键值对)
在下一行来写对象的属性和值得关系,注意缩进;比如:
行内写法
数组( List、set )
用 - 值表示数组中的一个元素,比如:
行内写法
使用
原先方法
使用yaml处理复杂实体类
实体类
yaml配置
新增依赖(可以不配置)
test
扩展
1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下
3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
4、复杂类型封装,yml中可以封装对象 , 使用value就不支持
结论:
配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
JSR303数据校验
Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。
常用注解
多环境配置
配置文件加载地址
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件:
- 优先级1:项目路径下的config文件夹配置文件
- 优先级2:项目路径下配置文件
- 优先级3:资源路径下的config文件夹配置文件
- 优先级4:资源路径下配置文件
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
多环境切换
多配置文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;
例如:
application-test.properties 代表测试环境配置
application-dev.properties 代表开发环境配置
但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件;
我们需要通过一个配置来选择需要激活的环境:
多文档块
注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的!
SpringBoot Web开发
前提:原来我们是一个web应用,main下会有一个webapp文件夹,以前都是将所有页面导在这里面的。但是现在我们打包方式为jar方式,需要改变写页面的方式
静态资源
在springboot中我们可以使用以下方式处理静态资源
- webjars 使用webjars依赖后可以将静态资源存到他生成的包下,访问时通过localhost:8080/webjars/+后续内容
- public, static, /**, resources 这四个包(/**就是resources包本身,而第四个意思是在resources包下再创建一个名为resouces包),他们下面的静态资源可以通过
localhost:8080/上述包名/静态资源
来访问- 优先级:resources > static(默认) > public
- resources下的tempalates包 在templates目录下的所有页面只能通过controller来跳转
首页如何定制
不同版本的使用方法不一样,但是最关键的就是需要将图标文件命名为favicon.ico。
低版本需要在配置文件中关闭默认图标,但是新版本中只要把图标文件放在static文件夹下就可以生效
thymeleaf模板引擎
前端交给我们的页面,是html页面。如果是我们以前开发,我们需要把他们转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面以后,我们可以用jsp轻松实现数据的显示,及交互等。
jsp支持非常强大的功能,包括能写Java代码,但是呢,我们现在的这种情况,SpringBoot这个项目首先是以jar的方式,不是war,像第二,我们用的还是嵌入式的Tomcat,所以呢,他现在默认是不支持jsp的。
那不支持jsp,如果我们直接用纯静态页面的方式,那给我们开发会带来非常大的麻烦,那怎么办呢?
SpringBoot推荐你可以来使用模板引擎:
模板引擎,我们其实大家听到很多,其实jsp就是一个模板引擎,还有用的比较多的freemarker,包括SpringBoot给我们推荐的Thymeleaf
Thymeleaf依赖
使用
我们只需要把我们的html页面放在类路径下的templates下,thymeleaf就可以帮我们自动渲染了
语法
- 我们要使用thymeleaf,需要在html文件中导入命名空间的约束,方便提示。我们可以去官方文档的#3中看一下命名空间拿来过来:
xmlns:th="http://www.thymeleaf.org"
- 具体内容自搜Thymeleaf 官网:https://www.thymeleaf.org/,一个例子:
扩展SpringMVC
写一个实现WebMvcConfigurer接口的类,并使用@Configuration注解,在这个类中实现功能的扩展。再使用@@EnableWebMvc(这个注解就是导入一个类,会从容器中获取所有的webmvcconfig)则SpringBoot会全面接管MVC(SpringBoot对SpringMVC的自动配置不需要了,所有都是我们自己去配置! )
官方原话
如果您希望保留Spring Boot MVC功能,并且希望添加其他MVC配置(拦截器、格式化程序、视图控制器和其他功能),则可以添加自己的@configuration类,类型为webmvcconfiguer,但不添加@EnableWebMvc。如果希望提供RequestMappingHandlerMapping、RequestMappingHandlerAdapter或ExceptionHandlerExceptionResolver的自定义实例,则可以声明WebMVCregistrationAdapter实例来提供此类组件。
视图解析器
-
SpringBoot自带两个视图解析器ContentNegotiatingViewResolver和BeanNameViewResolver
-
使用thymeleaf引擎,他也会给我们提供一个视图解析器
-
也可以自定义一个视图解析器:
- 自定义一个实现ViewResolver接口的静态类,重写方法
- 使用@Bean将这个组件交给SpringBoot,SpringBoot会帮我们自动装配
员工管理系统
首页配置
所有页面的静态资源(css,图片等)都需要使用thymeleaf接管
添加完头文件后<html lang="en" xmlns:th="http://www.thymeleaf.org">
,使用th:与@{}
页面国际化(i18n)
- 在resources下创建i18n包,并添加配置文件
- 如果需要在项目中进行按钮自动切换,需要自定义组件LocaleResolver
- 将组件通过@Bean注册岛spring容器中
https://mp.weixin.qq.com/s/e4Jd3xIMF4C4HBzPQfakvg
登录+拦截器
员工列表展示
-
提取公共页面
-
th:fragment="sidebar"
-
th:replace="~{commons/commons::topbar}"
-
如果要传递参数可以直接使用()传参,接收判断即可
-
列表循环展示
整合JDBC使用
使用Spring-Data
-
创建Spring-Boot工程时至少选上
-
数据库连接配置写在application.yml中,使用spring.datasource.xxx编写用户名,密码,url等内容
- 使用@Autowired注入Spring帮我们配置的Datasource对象
- 这个对象的getConnection可以获得connection对象
- 使用jdbc可以直接注入一个spring写好的模板JdbcTemplate(xxxxTemplate都是写好的一些模板,拿来即用),然后使用这个对象的方法进行jdbc操作
整合Druid数据源
导入Druid依赖
在整合JDBC的yml(也可以是properties文件,只不过写法不一样)中,datasource下再增加一条type,并且内容为DruidDataSource即可。
增加后可以在datasource下添加很多配置
配置德鲁伊监控器
因为SpringBoot内置了servlet容器,所以没有web.xml,注册Servlet的替代方法为将类注入Bean
整合Mybatis框架
使用整合包mybatis-spring-boot-starter
原先Mybatis:先写一个接口,再通过mapper.xml实现里面关于数据库操作的方法
现在:
- 在properties中配置数据库并整合Mybatis
- 接口使用@Mapper声明是Mapper类,使用@Repository将其与spring关联
- 在resources文件夹下创建mybatis文件夹,再在mybatis下创建mapper文件夹,里面创建.xml文件
- 编写EmployeeController类进行测试
SpringSecurity(安全)
主要两个功能:认证,授权
SpringSecurity与shiro都是用来做安全的框架,两者很像
运用AOP思想
三个重要元素:
- WebSecurityConfigurerAdapter:自定义Security策略
- AuthenticationManagerBuilder:自定义认证策略
- @EnableWebSecurity:开启WebSecurity模式
基础配置类
定义认证规则
在springboot 2.1.x可以正常使用
但是现在版本要求进行密码编码加密(防止反编译),在Spring Secutiry5.0+中新增了许多加密方式
改进为:
shirio
选择性内容,跳过
任务
异步任务
例子:
编写方法,假装正在处理数据,使用线程设置一些延时,模拟同步等待的情况
我们如果想让用户直接得到消息,就在后台使用多线程的方式进行处理即可,但是每次都需要自己手动去编写多线程的实现的话,太麻烦了,我们只需要用一个简单的办法,在我们的方法上加一个简单的注解即可
SpringBoot就会自己开一个线程池,进行调用!但是要让这个注解生效,我们还需要在主程序上添加一个注解@EnableAsync ,开启异步注解功能
邮件任务
添加spring-boot-starter-mail
配置文件
测试
定时任务
两个接口:
- TaskExecutor接口
- TaskScheduler接口
两个注解:
- @EnableScheduling
- @Scheduled
需要使用cron表达式
测试步骤:
1、创建一个ScheduledService
我们里面存在一个hello方法,他需要定时执行,怎么处理呢?
2、这里写完定时任务之后,我们需要在主程序上增加@EnableScheduling 开启定时任务功能
3、我们来详细了解下cron表达式;
http://www.bejson.com/othertools/cron/
4、常用的表达式
__EOF__

本文链接:https://www.cnblogs.com/zaughtercode/p/17062955.html
关于博主:qq:1730119093 欢迎加我讨论
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!