SpringBoot中4级配置文件
1级:file:config/application.yaml 【最高】
2级:file:application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】
总结:
1.项目文件分为4种:
2.多层级配置文件间的属性采用叠加并覆盖的形式作用于程序
通过启动参数加载配置文件(无需书写配置文件扩展名)
Edit Configrations->Configuration->Program arguments
--spring.config.name=ebank
通过启动参数加载指定文件路径下的配置文件时可以加载多个配置
Edit Configrations->Configuration->Program arguments
--spring.config.location=classpath:/ebank.properties,classpath:/ebank-server.properties
小结:
1.配置文件可以修改名称,通过启动参数设定
2.配置文件可以修改路径,通过启动参数设定
3.微服务开发中配置文件通过配置中心进行设置
总结:
1.SpringBoot在开发和运行环境均支持临时参数修改工程配置
2.SpringBook支持4级配置文件,应用于开发与线上环境进行配置的灵活设置
3.SpringBoot支持使用自定义配置文件的形式修改配置文件存储位置
4.基于微服务开发时配置文件将使用配置中心进行管理
spring:
profiles:
active: pro
---
spring:
profiles: pro
server:
port: 80
---
spring:
profiles: dev
server:
port: 81
---
spring:
profiles: test
server:
port: 82
spring:
profiles:
active: pro
---
server:
port: 80
spring: 过时格式
profiles: pro
spring:
profiles:
active: pro
---
server:
port: 80
spring: 推荐格式
config:
activate:
on-profiles: pro
总结:
多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
1.主启动配置文件application.yml
spring:
profiles:
active: dev
2.环境分类配置文件application-pro.yml
server:
port: 80
3.环境分类配置文件application-dev.yml
server:
port: 81
4.环境分类配置文件application-test.yml
server:
port: 82
主启动配置文件application.properties
spring.profiles.active=pro
环境分类配置文件application-pro.properties
spring.port=80
环境分类配置文件application-dev.properties
spring.port=81
环境分类配置文件application-test.properties
spring.port=82
总结:
properties文件多环境配置仅支持多文件格式
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下:
使用include属性再激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
profiles:
active: dev
include: devDB,devRedis,devMVC
配置文件加载顺序:devDB,devRedis,devMVC,dev 后面的配置文件覆盖前面的配置文件
注意事项
当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效
从SpringBoot2.4版开始使用group属性替代include属性,降低了配置书写量
使用group属性定义多种主环境与子环境的包含关系
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
配置文件加载顺序:devDB,devRedis,devMVC
总结:
多环境开发使用froup属性设置配置文件分组,便于线上维护管理
1.maven中设置多环境属性
<profiles>
<profile>
<id>dev_envid>
<properties>
<profile.active>devprofile.active>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>pro_envid>
<properties>
<profile.active>proprofile.active>
properties>
profile>
<profile>
<id>test_envid>
<properties>
<profile.active>proprofile.active>
properties>
profile>
profiles>
2.SpringBoot中引用Maven属性
spring:
profiles:
active: @profile.active@
"dev": devDB,devMVC
"pro": proDB,proMVC
3.执行Maven打包指令,并在生产的boot打包文件.jar文件中查看对应信息
总结:
1.当Maven与SpringBoot同时对多环境进行控制时,以Maven为主,SpringBoot使用@…@占位符读取Maven对应的配置属性值
2.基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效
步骤:代码中使用日志工具记录日志
1.Maven设置多环境属性
@RestController
@RequestMapping("/books")
public class BookController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(BookController.class);
@GetMapping
public String getById(){
System.out.println("springboot is running...");
log.debug("debug...");
log.info("info...");
log.warn("warn...");
log.error("error...");
return "springboot is running...";
}
}
2.设置日志输出级别
# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true
# 设置日志级别,root表示根节点,即整体应用日志级别
logging:
level:
root: debug
3.设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别
logging:
# 设置日志组
group:
# 自定义组名,设置当前组中所包含的包
ebank: com.luxifa.controller
level:
root: warn
# 为对应组设置日志级别
ebank: debug
# 为对应包设置日志级别
com.luxifa.controller: debug
总结:
1.日志用于记录开发调试与运维过程消息
2.日志的级别共6种,通常使用4种即可,分别是DEBUG,INFO,WARN,ERROR
3.可以通过日志组或代码包的形式进行日志显示级别的控制
使用lombok提供的注解@Slf4j简化开发,减少日志对象的声明操作
@Slf4j
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping
public String getById() {
System.out.println("springboot is running...");
log.debug("debug info...");
log.info("info info...");
log.warn("warn info...");
log.error("error info...");
return "springboot id running...";
}
}
总结:
基于lombok提供的@Slf4j注解为类快速添加日志对象
2023-02-20 16:39:40.334 INFO 2336 --- [ main] com.luxifa.SpringbootLogApplication Started SpringbootLogApplication in 1.281 seconds(JVM...)
2023-02-20 16:39:40.334 : 时间
INFO:级别
2336:PID 进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
main:所属线程
com.luxifa.SpringbootLogApplication:所属类/接口名 当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
Started SpringbootLogApplication in 1.281 seconds(JVM…):日志信息
设置日志输出格式
logging:
pattern:
console: "%d - %m%n"
logging:
pattern:
console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
总结:
日志输出格式设置规则
设置日志文件
logging:
file:
name: server.log
日志文件详细配置
loging:
file:
name: server.log
logback:
rollingpolicy:
max-file-size: 3KB
file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
总结:
1.日志记录到文件
2.日志文件格式配置
开启开发者工具
<denpendency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</denpendency>
激活热部署:Ctrl+F9 或者 Build->Build Project
关于热部署
总结:
1.开启开发者工具后启用热部署
2.使用构建项目操作启动热部署(Ctrl+F9)
3.热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源
步骤:
1.setting->Build,Excution,Deployment->Compiler->Build project automaticaly 勾选
2.Ctrl+Alt+Shift+/ 快捷键 然后在弹出的页面中 Registry->compiler.automake.allow.when.app.running 勾选
激活方式:Idea失去焦点5秒后启动热部署
默认不触发重启的目录列表
自定义不参与重启排除项
devtools:
restart:
# 设置不参与热部署的文件或文件夹
excude: public/**,static/**
方式一:
devtools:
restart:
# 设置不参与热部署的文件或文件夹
excude: public/**,static/**,config/application.yml
enbled:false
方式二:
设置高优先级属性禁用热部署
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled","false");
SpringApplication.run(SSMPAllication.class);
}
使用@ConfigurationProperties为第三方绑定属性
application.yml中:
datasource:
driverClassName: com.mysql.jdbc.Driver123
主程序:
@SpringBootApplication
public class SpringbootConfigurationApplication {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource datasource(){
DruidDataSource ds = new DruidDataSource();
return ds;
}
public static void main(String[] args) {
ConfiguravleApplicationContext ctx = SpringApplication.run(SpringbootConfigurationApplication.class,args);
DruidDataSource ds = ctx.getBean(DruidDataSource.class);
System.out.println(ds);
}
}
控制台:
com.mysql.jdbc.Driver123
@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器
application.yml中:
servers:
ipAddress: 192.168.0.1
port: 2848
timeout: -1
//Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(SpringbootApplication.class,args);
}
}
注意事项:
@EnableConfigurationProperties与@Component不能同时使用
解除使用@ConfigurationProperties注释警告
Spring Boot Configuration Annotation Processor not configuref Open Docementation...
pom.xml中添加如下依赖:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
dependency>
@ConfigurationProperties绑定属性支持属性名宽松绑定
不管是驼峰模式、下划线模式、中划线模式、常量模式都能绑定
驼峰模式:
servers:
ipAddress: 192.168.1.1
port: 2345
timeout: -1
下划线模式:
servers:
ip_address: 192.168.1.1
port: 2345
timeout: -1
中划线模式:
servers:
ip-address: 192.168.1.1
port: 2345
timeout: -1
常量模式:
servers:
IP_ADDRESS: 192.168.1.1
port: 2345
timeout: -1
//Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class SpringbootConfiurationApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootConfigurationApplication.class,args);
}
}
注意事项:
宽松绑定不支持注解@Value引用单个属性的方式
@ConfigurationProperties(prefix = “servers”) 绑定前缀命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符
总结:
1.@ConfigurationProperties绑定属性支持属性名宽松绑定
2.@value注解不支持松散绑定
3.绑定前缀命名规则
SpringBoot支持JDK8提供的时间与空间计量单位
servers:
ipAddress: 192.168.0.2
port: 2345
timeout: -1
serverTimeOut: 3
dataSize: 10
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
@DurationUnit(ChronoUnit.MINUTES)
private Duration serverTimeOut;
@DataSizeUnit(DataUnit.MEGABYTES)
private DataSize dataSize;
}
步骤:开启Bean数据校验
servers:
ipAddress: 192.168.0.2
port: 2345
timeout: -1
1.添加JSR303规范坐标与Hibernate校验框架对应坐标
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
2.对Bean开启校验功能
@Component
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
3.设置校验规则
@Component
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServerConfig {
@Max(value = 400,message = "最大值不能超过400")
private String ipAddress;
private int port;
private long timeout;
}
总结:
启动Bean属性校验