SpringBoot
一、配置
为什么依赖不需要声明版本?
- parent的父项目是
spring-boot-dependencies - 父项目版本仲裁中心,即,
spring-boot-dependencies,把所有常见的jar的依赖版本都声明好了
SpringBoot配置文件
配置文件必须放置在项目的类加载目录下, 并且名字必须是application开头的
一些约定配置在里面的,比如server.port:8080配置在application-spring-configuration-metadata.json
在代码中获取配置文件属性,通过spring
1 | package com.penghu.springboot3; |
yaml配置文件
连续的项目通过减号 “ - ” 来表示(理解为数组的第一个元素用“ - ”)
多环境切换
如果properties和yml文件都存在,如果有重叠属性,默认以properties优先。
二 SpringBoot原理
概述
SpringBoot只会扫描主程序所在的包及其下面的子包,自动的component-scan功能
虽然全场景的自动配置都在
spring-boot-autoconfigure这个包,但是不是全都开启的。导入哪个场景就开启哪个自动配置
比如,导入场景
spring-boot-starter-web每个场景启动器都引入了一个
spring-boot-starter,核心场景启动器。3、核心场景启动器引入了
spring-boot-autoconfigure包。4、
spring-boot-autoconfigure里面囊括了所有场景的所有配置。
场景启动器
1 | spring-boot-starter-* 官方的 |
主程序@SpringBootApplication
- 每个场景启动器都引入了一个
spring-boot-starter,核心场景启动器。 - 核心场景启动器引入了
spring-boot-autoconfigure包。 spring-boot-autoconfigure里面囊括了所有场景的所有配置。- SpringBoot默认却扫描不到
spring-boot-autoconfigure下写好的所有配置类。(这些配置类给我们做了整合操作)。
@SpringBootApplication由三个注解组成@SpringBootConfiguration、@EnableAutoConfiguratio、@ComponentScan
3个注解解析
1、@EnableAutoConfiguration:SpringBoot 开启自动配置的核心。
利用@Import 批量导入组件机制,把 autoconfigure 包下的142 xxxxAutoConfiguration类导入进来(自动配置类),按需控制,由条件注解@ConditionalOnxxx控制
1的延申。xxxxAutoConfiguration自动配置类的衍生
- 1、给容器中使用@Bean 放一堆组件。
- 2、每个自动配置类都可能有这个注解
@EnableConfigurationProperties(ServerProperties.class),用来把配置文件中配的指定前缀的属性值封装到xxxProperties属性类中 - 3、以DataSourceAutoConfiguration为例:所有配置都是以
spring.datasource开头的,配置都封装到了属性类中。 - 4、给容器中放的所有组件的一些核心参数,都来自于
xxxProperties。xxxProperties都是和配置文件绑定的。 - 只需要改配置文件的值,核心组件的底层参数都能修改
2、@SpringBootConfiguration。就是: @Configuration,标记当前类为配置类
3、**@ComponentScan**。
组件扫描:排除一些组件(哪些不要)
排除前面已经扫描进来的配置类、和自动配置类。
springboot核心流程总结:
1、导入starter,就会导入autoconfigure包。
2、autoconfigure 包里面有一个文件 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,里面指定的所有启动要加载的自动配置类
3、@EnableAutoConfiguration 会自动的把上面文件里面写的所有自动配置类都导入进来。xxxAutoConfiguration 是有条件注解进行按需加载
4、xxxAutoConfiguration给容器中导入一堆组件,组件都是从 xxxProperties中提取属性值
5、xxxProperties又是和配置文件进行了绑定
**效果:**导入starter、修改配置文件,就能修改底层行为。
三、SpringBoot自定义启动器
1 web相关配置5个重要参数
1.端口号
server.port
server.servlet.context-path`: 设置应用程序的上下文路径。
3、
spring.mvc.view.prefix和spring.mvc.view.suffix: 这两个属性用于配置视图解析器的前缀和后缀。spring.mvc.view.prefix定义视图的前缀,spring.mvc.view.suffix定义视图的后缀。
4、
spring.resources.static-locations: 配置静态资源的位置。默认情况下,Spring Boot会将静态资源放在classpath:/static目录下。您可以通过在配置文件中设置spring.resources.static-locations属性来自定义静态资源的位置。
1 | spring: |
5、
spring.http.encoding.charset和spring.http.encoding.enabled
这两个属性用于配置HTTP请求和响应的字符编码。spring.http.encoding.charset定义字符编码的名称(例如UTF-8),spring.http.encoding.enabled用于启用或禁用字符编码的自动配置。
2、静态资源目录
· classpath:/META-INF/resources/
· classpath:/resources/
· classpath:/static/
· classpath:/public/
习惯会把静态资源放在classpath:/static/ 目录下。在resources目录下创建index.html文件
3 定时任务
依赖
1 | <dependency> |
这部分略了
4 整合Druid数据源,没成功
druid的配置文件看一下
5 SpringBoot项目打包
在Spring Boot项目中添加spring-boot-maven-plugin插件是为了支持将项目打包成可执行的可运行jar包。如果不添加spring-boot-maven-plugin插件配置,使用常规的java -jar命令来运行打包后的Spring Boot项目是无法找到应用程序的入口点,因此导致无法运行。
1 | <!-- SpringBoot应用打包插件--> |
java -jar命令用于在Java环境中执行可执行的JAR文件。下面是关于java -jar命令的说明:
命令格式:java -jar [选项] [参数] <jar文件名>
-D<name>=<value>:设置系统属性,可以通过System.getProperty()方法在应用程序中获取该属性值。例如:java -jar -Dserver.port=8080 myapp.jar。-X:设置JVM参数,例如内存大小、垃圾回收策略等。常用的选项包括:-Xmx<size>:设置JVM的最大堆内存大小,例如-Xmx512m表示设置最大堆内存为512MB。-Xms<size>:设置JVM的初始堆内存大小,例如-Xms256m表示设置初始堆内存为256MB。
-Dspring.profiles.active=<profile>:指定Spring Boot的激活配置文件,可以通过application-<profile>.properties或application-<profile>.yml文件来加载相应的配置。例如:java -jar -Dspring.profiles.active=dev myapp.jar。
6 组件添加
1 @Configuration详解
1 | /** |
2 @Import(User.class)
给容器自动创建出对应类型的组件
默认组件名字就是全类名
3 @ImportResource(“classpath:beans.xml”)
导入Spring配置文件
4 配置绑定
方式1:
@Component
@ConfigurationProperties(prefix=”mycar”)
类里面的xxx属性,可以获得配置文件里的mycar.xxx的值
方式2:
前提:必须在配置类中写
开启属性配置功能方式1:
@Component
@ConfigurationProperties(prefix=”mycar”)
开启属性配置功能方式2(一般用这种):
@EnableConfigurationProperties(Car.class)
另一个作用:把指定的组件自动注册到容器中
四 最佳实践
1 引入场景自动配置
配置文件中debug=true,开启自动配置报告,看哪些生效,哪些不生效



