- 一、springboot相关概念
- 1.1 springboot的介绍
- 1.2 springboot的核心功能
- 1.2.1 自动配置
- 1.2.1 起步依赖
- 1.2.1 辅助功能
- 1.3springboot的优势
- 二、springboot快速入门
- 2.1 (一个基于springboot的简单web模块)流程步骤
- 2.2 springboot的快速构建
- 三、springboot的配置文件
- 3.1 springboot的配置文件分类
- 3.1.1 springboot配置文件中yaml(yml)后缀的配置文件的基本语法
- 3.1.1.1yaml(yml)的概念
- 3.1.1.2 基本语法
- 3.1.1.2 数据格式
- 3.1.1.2.1 对象(map)
- 3.1.1.2.2 数组
- 3.1.1.2.3 纯(常)量
- 3.1.1.2 yaml相关的参数,获取yaml中属性中的值 通过:${}符号
- 3.1.1.3 获取数据方式
- 3.1.2 springboot配置文件中profile属性的设置
- 3.1.2.1 profile是什么?
- 3.1.2.2 profile的作用
- 3.1.2.3 profile的配置方式
- 3.1.2.4 profile激活方式
- 3.2 项目内部配置文件的加载顺序
- 3.3 项目外部配置的加载顺序
- 3.3.1 外部配置文件的作用
- 3.3.1 外部配置文件的位置
- 四、spring整合起他技术
- 4.1 SpringBoot整合Junit
- 4.2 SpringBoot整合Mybatis
- 4.3 SpringBoot整合redis
- 五、springboot进阶
- 5.1 springboot的自动配置
- 5.1.1关于自动配置中的条件注解@Condition
- 5.1.1.1先了解condition是啥?
- 5.1.1.2使用步骤:
- 5.1.1.3 condition的进阶使用
- 5.1.2 关于自动配置中的切换WEB服务器
- 5.1.3 关于自动配置中@Enable注解的原理
- 5.1.4 关于自动配置中@Import详解
- 5.1.5 关于自动配置中@EnableAntoConfiguration详解
- 5.1.6 关于自动配置中自定义Starter
- 5.2 springboot的监控
- 5.2.1 流程分析
- 5.2.2 actuator工具基本使用
- 5.3 springboot的部署
SpringBoot提供了一种快速使用Spring的方式,不是对spring的增强,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率1.2 springboot的核心功能 1.2.1 自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。1.2.1 起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。1.2.1 辅助功能
提供了一些大型项目中常见的非功能性特性,如嵌入式服务器(启动的时候不用去配置额外的服务器 :例如tomcat)、安全、指标,健康检测、外部配置等。1.3springboot的优势
注意:Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式 优势:弥补了spring的缺点 spring缺点:
1、配置文件 多 、难记、配置繁琐 ==>spring boot 自动配置功能解决spring这个缺点
2、依赖繁琐 项目构造工具 导坐标—> 坐标–>版本兼容 ==>spring boot 自动起步依赖解决spring这个缺点
二、springboot快速入门 2.1 (一个基于springboot的简单web模块)流程步骤1、创建Maven工程 2、添加SpringBoot的启动器 3、编写SpringBoot引导类 4、编写Controller 5、测试2.2 springboot的快速构建
通过提供的服务器的统一资源定位符去初始化一个springboot项目,默认为starts.spring.io;但是忒慢了,建议使用starts.aliyun.io;(之后也可以在自己的maven工程的setting文件中设置拉取jar包的地址也为aliyun的 通过setting.xml文件中三、springboot的配置文件 3.1 springboot的配置文件分类标签设置,这样之后 你拉jar包的坐标会变快很多)
spring-boot提供的配置文件的分类: 1、properties 2、yaml/yml 之所以有些是因为: SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。 1. 默认配置文件名称:application 2. 在同一级目录下配置文件夹的**执行优先级**为:properties>yml > yaml3.1.1 springboot配置文件中yaml(yml)后缀的配置文件的基本语法 3.1.1.1yaml(yml)的概念
yaml ain‘t markup language 不是标记语言 是一种直观的能够被电脑识别的数据序列化格式,yaml是以数据为中心比传统的xml更简洁,更好的以数据为核心3.1.1.2 基本语法
- 大小写敏感 - 数据值前边必须有空格,作为分隔符 - 使用缩进表示层级关系
-
- 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。 - 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 -
- ''#" 表示注释,从这个字符一直到行尾,都会被解析器忽略。
yaml支持(三种不同的数据格式:对象 、数组、 纯(常)量)3.1.1.2.1 对象(map)
键值对的集合。缩进表示子父的关系 (注意空格)
eg:
[^1]: person:
name: zhangsan
行内写法:person: {name: zhangsan}
3.1.1.2.2 数组
一组按次序排列的值 横杠+空格 eg: address: - beijing - shanghai 行内写法 address: [beijing,shanghai]3.1.1.2.3 纯(常)量
单个的、不可再分的值 (常量) eg: msg1: 'hello n world' # 单引忽略转义字符 msg2: "hello n world" # 双引识别转义字符3.1.1.2 yaml相关的参数,获取yaml中属性中的值 通过:${}符号
eg:
name: lisi
person:
name: ${name} # 引用上边定义的name值
3.1.1.3 获取数据方式
第一,首先要先搞清楚,为什么要获取配置文件的数据,这是一位在配置文件中,会有两种关于不同内容的配置,一种是自定义另一种是会被springboot自动识别的,而自定义的配置信息springboot不会解析到,这时候 如何获取配置文件中的自定义信息 就极为重要了,在此提及三种活起配置文件中的数据;
方式一:通过在需要获取配置文件中值的java类的有关属性上,使用@Value注解,通过“${}”这个符号,获取值
方式二:通过Evironment对象中getProperty()方法
方式三:通过@ConfigurationProperties :配置内容 与 对象进行相互绑定的方式,注意:prefix(前缀)一定要写
3.1.2 springboot配置文件中profile属性的设置
3.1.2.1 profile是什么?
profile是springboot配置文件中的一个属性,通过指定这个属性的值,从而完成切换不同的环境3.1.2.2 profile的作用
profile是用来完成不同环境下,配置动态切换功能的3.1.2.3 profile的配置方式
多profile文件方式:提供多个配置文件,每个代表一种环境。
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
yml多文档方式:
在yml中使用 — 分隔不同配置
3.1.2.4 profile激活方式- 配置文件: 再配置文件中配置:spring.profiles.active=dev - 虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev - 命令行参数:java –jar xxx.jar --spring.profiles.active=dev 执行顺序:虚拟机参数 >配置文件,命令行参数>配置文件3.2 项目内部配置文件的加载顺序
加载顺序为以下的排列顺序,高优先级配置的属性会生效 - file:./config/:当前项目下的/config目录下 :高 - file:./ :当前项目的根目录 :中上 - classpath:/config/:classpath的/config目录 :中 - classpath:/ :classpath的根目录 :下3.3 项目外部配置的加载顺序 3.3.1 外部配置文件的作用
与内部配置形成互补 ,当内部配置文件有错,配置外部配置 就可以减少去再次修改内部配置 减少打包次数3.3.1 外部配置文件的位置
1.命令行
java -jar app.jar --name="Spring“ --server.port=9000
2.指定配置文件位置
java -jar myproject.jar --spring.config.location=e://application.properties
3.外部不带profile的properties文件
classpath:/config/application.properties
classpath:/application.properties
四、spring整合起他技术
4.1 SpringBoot整合Junit
步骤:
1. 搭建SpringBoot工程
2. 引入starter-test起步依赖
3. 编写测试类
涉及@runwith中SpringRunner.class
@SpringBootTest,SpringbootJunitApplication.class
test中和java包一摸一样,就可以不指定SpringBootTest中classes属性
4. 测试
起步依赖:
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test
测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJunitApplication.class )
public class UserServiceTest {
@Test
public void test(){
System.out.println(111);
}
}
4.2 SpringBoot整合Mybatis
步骤:
①搭建SpringBoot工程 ②引入mybatis起步依赖,添加mysql驱动
org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.0 mysql mysql-connector-java org.springframework.boot spring-boot-starter-test test
③编写DataSource和MyBatis相关配置:application.yml
# datasource
spring:
datasource:
url: jdbc:mysql:///springboot?serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# mybatis config-location:指定mybatis的核心配置文件
mybatis:
mapper-locations: classpath:mapper
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//1.需求: 导入Jedis坐标后创建Bean
//思路:判断redis.clients.jedis.Jedis.class文件是否存在
boolean flag = true;
try {
//forName("类的全限定名")
Class> cls = Class.forName("redis.clients.jedis.Jedis");
} catch (ClassNotFoundException e) {
flag = false;
}
return flag;
}
}
2、在需要spring创建的bean对象的地方加上一个@Condition条件标签 注意:@Conditional要配和Condition的实现类(ClassCondition)进行使用5.1.1.3 condition的进阶使用
需求:将类的判断定义为动态的。判断哪个字节码文件存在可以动态指定 步骤: 1、自定义条件注解类
import org.springframework.context.annotation.Conditional;
import java.lang.annotation.*;
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(ClassCondition.class)
public @interface ConditionOnClass {
String[] value();
}
**注意:**此处@ConditionOnClass为自定义注解
2、创建bean对象的配置类
@Configuration
public class UserConfig {
@Bean
//@Conditional(ClassCondition.class)
@ConditionOnClass("com.alibaba.fastjson.JSON")
public User user(){
return new User();
}
@Bean
@ConditionalOnProperty(name = "itcast",havingValue = "itheima")
public User user2(){
return new User();
}
}
5.1.2 关于自动配置中的切换WEB服务器
步骤:先排除原有项目中默认的tomcat服务器,然后再引入其他其他web服务器的坐标,例如:jetty服务器5.1.3 关于自动配置中@Enable注解的原理
为啥有它? 由于SpringBoot不能直接获取在其他工程中定义的Bean5.1.4 关于自动配置中@Import详解
@Enable*底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中。而@Import提供4中用法: ①导入Bean ②导入配置类 ③导入 ImportSelector 实现类。一般用于加载配置文件中的类 ④导入 ImportBeanDefinitionRegistrar 实现类。5.1.5 关于自动配置中@EnableAntoConfiguration详解
@EnableAutoConfiguration 注解内部使用 @Import(AutoConfigurationImportSelector.class)来加载配置类。
配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当 SpringBoot 应用启动时,会自动加载这些配置类,初始化Bean
并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean
自定义starter步骤分析
①创建 redis-spring-boot-autoconfigure 模块
②创建 redis-spring-boot-starter 模块,依赖 redis-spring-boot-autoconfigure的模块
③在 redis-spring-boot-autoconfigure 模块中初始化 Jedis 的 Bean。并定义META-INF/spring.factories 文件
④在测试模块中引入自定义的 redis-starter 依赖,测试获取 Jedis 的Bean,操作 redis。
自定义starter步骤实现方式
实现方式一
1、创建redis-spring-boot-starter工程
2、创建redis-spring-boot-autoconfigure配置工程
3、创建RedisProperties配置文件参数绑定类
4、 创建RedisAutoConfiguration自动配置类
5、在resource目录下创建META-INF文件夹并创建spring.factories
6、在springboot-enable工程中引入自定义的redis的starter
测试
实现方式二
测试springboot-enable工程中的application.properties中的配置参数
使用注解完成有条件加载配置类
会报错:这是由于你在项目中配置redis的端口号,但是服务器的端口号,依然是6379
Java中的事件监听机制定义了以下几个角色: ①事件:Event,继承 java.util.EventObject 类的对象 ②事件源:Source ,任意对象Object ③监听器:Listener,实现 java.util.EventListener 接口 的对象 SpringBoot 在项目启动时,会对这几个监听器进行回调 - ApplicationContextInitializer、 resource文件夹下添加META-INF/spring.factories,添加相关键值对配置 - SpringApplicationRunListener、 resource文件夹下添加META-INF/spring.factories,添加相关键值对配置 使用要添加**构造器** - CommandLineRunner、 使用@Component放入容器即可使用 - ApplicationRunner 使用@Component放入容器即可使用5.2.1 流程分析
初始化 1. 配置启动引导类(判断是否有启动主类) 2. 判断是否是Web环境 3. 获取初始化类、监听器类 图解 run 1. 启动计时器 2. 执行监听器 3. 准备环境 4. 打印banner:可以resource下粘贴自定义的banner 5. 创建context 图解5.2.2 actuator工具基本使用
是个啥? 监控工具包,用来在程序运行时监控运行数据,开发者可以使用http端点或jmx来管理和监控应用程序的健康状况、应用信息、内存使用状况等 步骤 ①导入依赖坐标 ②访问http://localhost:8080/acruator 配置文件相关配置 开启健康检查详细信息 management.endpoint.health.show-details=always 开启所有endpoint management.endpoints.web.exposure.include=* springboot admin图形化界面使用 SpringBoot Admin 有两个角色,客户端(Client)和服务端(Server)。 步骤 ①创建 admin-server 模块 ②导入依赖坐标 admin-starter-server ③在引导类上启用监控功能@EnableAdminServer 4、创建 admin-client 模块 5、导入依赖坐标 admin-starter-client 6、配置相关信息:server地址等 7、配置相关信息:server地址等5.3 springboot的部署
支持两种方式部署到服务器 ①jar包(官方推荐) ②war包 步骤 1、更改pom文件中的打包方式为war
可以在标签中设置,标签设置打war包后的名称
2、修改启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class SpringbootDeployApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootDeployApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootDeployApplication.class);
}
}



