SpringBoot学习笔记(二)

配置文件分类

SpringBoot中4级配置文件
1级:file:config/application.yaml 【最高】
2级:file:application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】

总结:

1.项目文件分为4种:

  • 项目类路径配置文件:服务于开发人员本机开发于测试
  • 项目类路径config目录种配置文件:服务于项目经理整体调控
  • 工程路径配置文件:服务于运维人员配置涉密线上环境
  • 工程路径config目录中配置文件:服务于运行经理整体调控

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

自定义配置文件-重要说明

  • 单服务器项目:使用自定义配置文件需求较低
  • 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
  • 基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息

小结:
1.配置文件可以修改名称,通过启动参数设定
2.配置文件可以修改路径,通过启动参数设定
3.微服务开发中配置文件通过配置中心进行设置

总结:

1.SpringBoot在开发和运行环境均支持临时参数修改工程配置
2.SpringBook支持4级配置文件,应用于开发与线上环境进行配置的灵活设置
3.SpringBoot支持使用自定义配置文件的形式修改配置文件存储位置
4.基于微服务开发时配置文件将使用配置中心进行管理


多环境开发(yaml版)

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
   

总结:

多环境开发需要设置若干种常用环境,例如开发、生产、测试环境


多环境开发多文件版(yaml版)

多环境开发(YAML版)多配置文件格式

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

多环境开发配置文件书写技巧(一)

  • 主配置文件中设置公共配置(全局)
  • 环境分类配置文件中常用于设置冲突属性(局部)

多环境开发多文件版(properties版)

多坏境开发(Properties版)多配置文件格式

主启动配置文件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文件多环境配置仅支持多文件格式


多环境分组管理

多环境开发独立配置文件书写技巧(二)

根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下:

  • application-devDB.yml
  • application-devRedis.yml
  • application-devMVC.yml

使用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属性设置配置文件分组,便于线上维护管理


多环境开发控制

Maven与SpringBoot多环境兼容

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"
  • %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

关于热部署

  • 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
  • 重载(Reload):jar包,加载位置base类加载器

总结:

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秒后启动热部署

热部署范围配置

默认不触发重启的目录列表

  • /META-INF/maven
  • /META-INF/reesources
  • resources
  • static
  • public
  • templates

自定义不参与重启排除项

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);
}

配置高级

@Confiturationproperties

使用@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属性校验

步骤:开启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属性校验

  • 导入JSR303与Hibernate校验框架坐标
  • 使用@Validated注解启动校验功能
  • 使用具体校验规则范数据校验格式

你可能感兴趣的:(spring,boot,学习,java)