1 SpringBoot概述
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文件中引入一些依赖
<!--springboot工程需要继承的父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
</parent>
<dependencies>
<!--web开发的起步依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
引导类编写,以后直接运行该类的mian方法就可启动SpringBoot项目
小结
1 SpringBoot在创建项目时,使用jar的打包方式
2 SpringBoot的引导类是项目的入口
3 SpringBoot 与 Spring 构建项目,业务代码编写方式一样
3 使用idea快速构建SpringBoot工程
1 首先创建新工程的操作下图:
2 打开项目后,自动编写好了Application类,即项目的入口,可直接启动项目
4 SpringBoot配置
4.1 配置文件分类
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方法
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4.4 profile
profile功能用于进行动态配置切换的。
4.4.1 profile配置方式
默认是8080端口号,如需特定的配置文件需要在application.properties里激活
spring.profiles.active=dev #表示激活application-dev.properties文件
运行后:
通过---进行划分,再调用active进行激活
4.4.2 profile激活方式
方式一:配置文件
如4.4.1小结所示
在VM options指定
-Dspring.profiles.active=dev
可在cmd命令行里:
java -jar xxx.jar --spring.profiles.active=dev
4.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 编写测试方法
5.2 整合Redis
步骤:
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
6.1.2 切换内置web服务器
默认使用tomcat作为内置服务器,内置有四个web服务器工程
在pom.xml文件里,将tomcat依赖排除,加入jetty依赖即可进行切换
6.1.3 @Enable*注解原理
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 bean
6.1.4 @Import注解
用法:
1 导入Bean
2 导入配置类
3 导入ImportSelector实现类,一般用于加载配置文件中的类
4 导入ImportBeanDefinitionRegistrar实现类
1 导入Bean
2 导入配置类
通过Import方式,配置类上的@Configuration可忽略!!!!
3 导入 ImportSelector实现类
定义一个MyImportSelector类实现ImportSelector的selectImports方法,返回一个字符串数组。入口处直接Import这个自定义的MyImportSelector类即可。
4 导入ImportBeanDefinitionRegistrar实现类
可通过自定义Bean的名称来获取
6.1.5 @EnableAutoConfiguration注解
1 @EnableAutoConfiguration注解内部使用@Import(AutoConfigurationImportSelector.class)加载配置文件
2 配置文件位置:META-INF/spring.factories
3 在配置类中使用Condition加载满足条件的Bean
6.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 需要配置才可在启动时调用其方法。
6.3 SpringBoot监控
自带监控功能Actuator,如监控状况、Bean加载情况、配置属性、日志信息等
使用步骤:
1 导入依赖坐标
2 访问:http://localhost:8080/actuator
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
创建好后直接启动,访问上述网址,返回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包
1 先在pom.xml文件里配置
2 更改入口类文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/2630.html