SpringBoot 是使用最小的配置去启动Spring的项目。提供一种快速使用Spring项目的方式!!!!
Spring缺点: 1 配置繁琐 2 依赖繁琐 SpringBoot功能: 1 自动配置 一个运行时的过程 2 起步依赖 本质是一个Maven项目对象模型(POM),定义了对其他库的传递依赖 即,将具备某种功能的坐标打包到一起,并提供一些默认的功能。 3 辅助功能 提供一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标、外部配置等。.2 SpringBoot入门
实现步骤: 1 创建Maven项目 2 导入SpringBoot起步依赖 3 定义Controller 4 编写引导类(SpringBoot项目入口) 5 启动测试
在pom.xml文件中引入一些依赖
org.springframework.boot
spring-boot-starter-parent
2.1.8.RELEASE
org.springframework.boot
spring-boot-starter-web
引导类编写,以后直接运行该类的mian方法就可启动SpringBoot项目
小结 1 SpringBoot在创建项目时,使用jar的打包方式 2 SpringBoot的引导类是项目的入口 3 SpringBoot 与 Spring 构建项目,业务代码编写方式一样3 使用idea快速构建SpringBoot工程
1 首先创建新工程的操作下图:
2 打开项目后,自动编写好了Application类,即项目的入口,可直接启动项目
3 直接在里面写Controller类即可
SpringBoot是基于约定的,如想使用自己的配置替换默认配置,可使用application.properties 或 application.yml(application.yaml)配置
格式:
properties:
server.port = 8080
yml:
server: port: 8080
同级目录下优先级:properties>yml>yaml
4.2 yaml基本语法1 大小敏感 2 数据值前面必须有空格,作分隔符!!!!! 3 使用缩进表层级关系 4 只能使用空格缩进 5 相同层级元素左侧对齐 6 # 表注释
数据格式:
1 对象(map):键值对集合 如下,person:后有空格,name:后有空格
person:
name:xxx
#行内写法
person: {name: xxx}
2 数组:
address: -xxx1 -xxx2 #行内写法 address: [xxx1,xxx2]
3 纯量:单个、不可再分的值
msg1: 'xxx' #单引忽略转义字符 msg2: "xxx" #双引识别转义字符
参数引用:
name:xxx
person:
name: ${name} #引用上面定义的name值
4.3 读取配置文件内容
方式一 :@Value
@Value("${name}") //name要与yaml文件里的name字段对应
private String name;
@Value("${person.name}")
private String person_name;
方式二:Environment
//注入一个环境对象
@Autowired
private Environment env;
env.getProperty("键的名称")
方式三:@ConfigurationProperties
//将对象属性值自动注入对应位置
@Component //表示该类被spring识别,是一个bean
@ConfigurationProperties(prefix = " ") //将属性自动注入对应位置,prefix加入前缀,指定
public class Person(){
private String name;
private int age;
//get set toString方法
}
在pom.xml文件里加入依赖即可解决
4.4 profileorg.springframework.boot spring-boot-configuration-processor true
profile功能用于进行动态配置切换的。
4.4.1 profile配置方式方式一:多profile文件方式
默认是8080端口号,如需特定的配置文件需要在application.properties里激活
spring.profiles.active=dev #表示激活application-dev.properties文件
运行后:
方式二: yml多文档方式
通过---进行划分,再调用active进行激活4.4.2 profile激活方式
方式一:配置文件
如4.4.1小结所示
方式二:虚拟机参数
在VM options指定
-Dspring.profiles.active=dev
方式三:命令行参数
可在cmd命令行里:
java -jar xxx.jar --spring.profiles.active=dev4.5 内部配置加载顺序
加载优先级顺序: 1 file:./config/:当前项目下的/config目录下 2 file:./ :当前项目的根目录 3 classpath:/config/:classpath的/config目录 4 classpath:/ :classpath的根目录5 SpringBoot整合 5.1 整合Junit
步骤: 1 搭建SpringBoot工程 2 引入starter-test起步依赖 3 编写测试类 4 添加测试相关注解 @RunWith(SpringRunner.class) @SpringBootTest(classes = 启动类.class) 5 编写测试方法
步骤: 1 搭建Spring Boot工程(用idea选NoSql) 2 引入redis起步依赖 3 配置redis相关属性 4 注入RedisTemplate模板 5 编写测试方法,测试
默认自动链接配置本机redis。 通过application.yml配置相关redis信息,以此更改默认配置5.3 整合MyBatis
步骤: 1 搭建SpringBoot工程(用idea 选Sql里mybatis与mysql) 2 引入mybatis起步依赖,添加mysql驱动 3 编写DataSource和MyBatis相关配置 4 定义表和实体类 5 编写dao和mapper文件、纯注解开发 6 测试
注解形式:(无需配置mybatis)
先通过application.yml配置mysql数据库基本信息
然后创建实体类,接着创建接口方法,采用注解形式进行数据库查询
最后进行测试6 SpringBoot原理分析 6.1 自动配置 6.1.1 Condition
Condition条件判断功能,可实现选择性的创建Bean操作: 自定义条件: 1 定义条件类:自定义类实现Condition接口,重写matches方法,返回boolean值。matches两个参数: context:上下文对象,可获取属性值、类加载器、BeanFactory metadata:元数据对象,用于获取注解属性 2 判断条件:在初始化Bean时,使用@Conditional(条件类.class)注解
SpringBoot常用条件注解:
ConditionalOnProperty:判断 配置文件 中是否有对应属性、值才初始化Bean
ConditionalOnClass:判断环境中是否有对应字节码才初始化Bean
ConditionalOnMissingBean:判断环境中没有对应Bean才初始化Bean
默认使用tomcat作为内置服务器,内置有四个web服务器工程
在pom.xml文件里,将tomcat依赖排除,加入jetty依赖即可进行切换
Enable开头的注解用于动态启动某些功能,底层原理是使用@import注解导入一些配置类,实现Bean的动态加载。
@SpringBootApplication里的 @ComponentScan 扫描范围:当前引导类所在包及其子包
不能直接获取自定义注入对象
解决:
1 使用@ComponentScan 扫描 2 使用@import注解,加载类,都被Spring创建并放入IOC容器 3 对import注解进行封装,即自定义一个注解,将2加入其中,再加入原有注解,如下:
@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.documented
//以上为自定义注解必须要加的原有注解
@import(UserConfig.class)
//自定义User bean的注解
public @interface EnableUser{
}
后续直接使用@EnableUser注解,就可使用User bean6.1.4 @import注解
用法:
1 导入Bean 2 导入配置类 3 导入importSelector实现类,一般用于加载配置文件中的类 4 导入importBeanDefinitionRegistrar实现类1 导入Bean 2 导入配置类
通过import方式,配置类上的@Configuration可忽略!!!!
定义一个MyimportSelector类实现importSelector的selectimports方法,返回一个字符串数组。入口处直接import这个自定义的MyimportSelector类即可。
可通过自定义Bean的名称来获取6.1.5 @EnableAutoConfiguration注解
1 @EnableAutoConfiguration注解内部使用@import(AutoConfigurationimportSelector.class)加载配置文件 2 配置文件位置:meta-INF/spring.factories 3 在配置类中使用Condition加载满足条件的Bean6.1.6 自定义starter
首先创建两个模块,一个autoconfigure用于写核心自动配置类,一个starter用于依赖的整合
在starter中引入configure的依赖 在configure中引入jedis的依赖
创建RedisAutoConfiguration配置类,提供Jedis的bean
通过创建RedisProperties类,进行动态配置主机名与端口号
创建meta-INF目录下的spring.factories文件,编写键值对6.2 事件监听
是对java提供的事件监听机制的封装
java事件监听角色: 1 事件:Event,继承 java.util.EventObject类的对象 2 事件源:Source,任意对象Object 3 监听器:Listener,实现 java.util.EventListener接口的对象
SpringBoot项目启动时回调的监听器:
1 ApplicationContextInitializer 2 SpringApplicationRunListener 3 CommandLineRunner 4 ApplicationRunner
自定义类分别实现四个接口的方法,随后@Component将其注册到Spring容器中去
在启动SpringBoot项目后,显示如下:
此时仅仅只执行了了ApplicationRunner 与 CommandLineRunner 两个监听的run方法(放入IOC容器即可执行)
ApplicationContextInitializer 与 SpringApplicationRunListener 需要配置才可在启动时调用其方法。
自带监控功能Actuator,如监控状况、Bean加载情况、配置属性、日志信息等
使用步骤:
1 导入依赖坐标 2 访问:http://localhost:8080/actuator
org.springframework.boot spring-boot-starter-actuator
创建好后直接启动,访问上述网址,返回Json字符串
在配置文件中开启健康检查的完整信息
将所有监控endpoint暴露出来SpringBoot Admin图形化界面使用
1 是一个开源社区项目,用于管理与监控SpringBoot应用程序 2 有两个角色,客户端(Client)和服务端(Server) 3 应用程序作为Client 向为Server注册 4 Admin UI界面将Client的Actuator Endpoint上的监控信息展示
使用步骤:
admin-server: 1 创建admin-server模块 2 导入依赖坐标admin-starter-server 3 在引导类上启用监控功能@EnableAdminServer admin-client: 1 创建admin-client模块 2 导入依赖坐标admin-starter-client 3 配置相关信息:server地址等 4 启动server和client服务,访问server
先启动server再启动client,访问localhost:8081,显示如下:6.4 项目部署
支持两种方式部署: 1 jar包(官方推荐) 2 war包
默认打包成jar包方式:
更改打包方式:
1 先在pom.xml文件里配置
2 更改入口类文件



