5.SpringBoot⾼级配置

news/2024/11/24 7:38:34/

目录

5.1 临时属性配置

1.引入依赖(创建工程时默认引入了)

 2.使⽤maven中的package进⾏打包

3.使用命令行运行jar包,可以传递临时参数

 4.运⾏项⽬传⼊临时参数配置说明

优先级在官⽅⽂档可⻅

5.2 配置⽂件优先级 

 5.3 多环境开发

多环境开发

多环境开发配置⽂件规则 

5.4 @ConfigurationProperties⾼级配置

给⾃定义的bean加载属性值

 为第三⽅bean加载属性

步骤①:使⽤@Bean注解定义第三⽅bean

步骤②:在yml中定义要绑定的属性

步骤③:使⽤@ConfigurationProperties注解为第三⽅bean进⾏属性绑定,注意前缀是全⼩写的datasource

哪些bean通过注解@ConfigurationProperties去绑定属性了

步骤①:在引导类上开启@EnableConfigurationProperties注解,并标注要绑定属性的类

步骤②:在对应的类上直接使⽤@ConfigurationProperties进⾏属性绑定

5.5 松散绑定 

5.6 数据校验 

1.开启校验框架

2.在需要开启校验功能的类上使⽤注解@Validated开启校验功能 

3.对具体的字段设置校验规则


5.1 临时属性配置

可以将java程序打包成jar, 在运⾏jar包的时候传递参数, 具体如下:

1.引入依赖(创建工程时默认引入了)

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

 2.使⽤maven中的package进⾏打包

 打包完的jar包在target文件夹

3.使用命令行运行jar包,可以传递临时参数

java -jar 工程jar包路径 --变量=参数

 

 4.运⾏项⽬传⼊临时参数配置说明

优先级在官⽅⽂档可⻅

         原因:

        在springboot的引导类的main方法中有一个args参数列表,它会传递给run方法,替换原来的在application.yml中的配置。如果删除这个args就无法传递临时变量

5.2 配置⽂件优先级 

SpringBoot提供的4级配置⽂件中的其中⼀个级别。4个级别分别是:

  • 类路径下配置⽂件(⼀直使⽤的是这个,也就是resources⽬录中的application.yml⽂件)
  • 类路径下config⽬录下配置⽂件
  • 程序包所在⽬录中配置⽂件
  • 程序包所在⽬录中config⽬录下配置⽂件

上⾯4个⽂件的加载优先顺序为 

1. file :config/application.yml 【最⾼】
2. file :application.yml
3. classpath:config/application.yml
4. classpath:application.yml 【最低】

SpringBoot会从这四个位置全部加载主配置⽂件,如果⾼优先级中配置⽂件属性与低优先级配置⽂件不冲突的属性,则会共同存在— 互补配置。 

SpringBoot会加载全部主配置⽂件;互补配置:

备注:
这⾥说的配置⽂件,都还是项⽬⾥⾯。最终都会被打进jar包⾥⾯的,需要注意。
1、如果同⼀个⽬录下,有application.yml也有application.properties,默认先读取application.properties。
2、如果同⼀个配置属性,在多个配置⽂件都配置了,默认使⽤第1个读取到的,后⾯读取的不覆盖前⾯读取到的。
3、创建SpringBoot项⽬时,⼀般的配置⽂件放置在“项⽬的resources⽬录下”

 5.3 多环境开发

项⽬在部署的时候,可能存在多个环境,我们有开发环境,测试环境,正式环境,但是配置都不相同,因此为了解决多环境配置⽂件不同的问题,我们可以有多个配置⽂件,来对不同的环境进⾏满⾜。

多环境开发

每个配置⽂件中写⾃⼰的配置,主配置⽂件中写清楚⽤哪⼀个配置⽂件就好了。

其他环境配置⽂件(例如开发dev、测试test、生产pro)

        ⽂件的命名规则为:application-环境名.yml。

⽐如⽣产环境配置如下:

        application-pro.yml

spring:
# 给配置文件命名config:activate:on-profile: pro
# 或者(可使用,但是已被弃用,不推荐)profiles: pro

主配置⽂件 application.yml

spring:profiles:#  使用一个配置文件proactive: pro#    或者config:activate:on-profile: pro

在配置⽂件中,如果某些配置项所有环境都⼀样,可以将这些项写⼊到主配置中,只有哪些有区别的项才写⼊到环境配置⽂件中。 

  • 主配置⽂件中设置公共配置(全局)
  • 环境分类配置⽂件中常⽤于设置冲突属性(局部)
  • 可以使⽤独⽴配置⽂件定义环境属性
  • 独⽴配置⽂件便于线上系统维护更新并保障系统安全性

多环境开发配置⽂件规则 

配置⽂件中的信息进⾏拆分,并制作成独⽴的配置⽂件,命名规则如下

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

⽅式1: 

        使⽤include属性在激活指定环境的情况下,同时对多个环境进⾏加载使其⽣效,多个环境间使⽤逗号分隔,include后面按序优先级递增(下面devMVC优先级最高)。include与active组合使用,include优先级高

spring:profiles:
# 使用多个配置文件include: devDB,devRedis,devMVC

⽅式2: 

        SpringBoot从2.4版开始使⽤group属性替代include属性,降低了配置书写量。

spring:profiles:active: devgroup:"dev": devDB,devRedis,devMVC"pro": proDB,proRedis,proMVC"test": testDB,testRedis,testMVC

5.4 @ConfigurationProperties⾼级配置

如果使用@ConfigurationProperties注解报错:

 需要引入一个依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

给⾃定义的bean加载属性值

注解@ConfigurationProperties指定该对象加载哪⼀组yaml中配置的信息,为bean绑定属性。

 为第三⽅bean加载属性

步骤①:使⽤@Bean注解定义第三⽅bean

@Bean
public DruidDataSource datasource(){DruidDataSource ds = new DruidDataSource();return ds;
}

步骤②:在yml中定义要绑定的属性

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver

步骤③:使⽤@ConfigurationProperties注解为第三⽅bean进⾏属性绑定,注意前缀是全⼩写的datasource

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DruidDataSource datasource(){DruidDataSource datasource = new DruidDataSource();return datasource;
}

        @ConfigurationProperties注解不仅能添加到类上,还可以添加到⽅法上,添加到类上是为spring容器管理的当前类的对象绑定属性,添加到⽅法上是为spring容器管理的当前⽅法的返回值对象绑定属性,其实本质上都⼀样。

哪些bean通过注解@ConfigurationProperties去绑定属性了

spring给我们提供了⼀个全新的注解,专⻔标注使⽤@ConfigurationProperties注解绑定属性的bean是哪些。这个注解叫做@EnableConfigurationProperties。

使用步骤:

步骤①:在引导类上开启@EnableConfigurationProperties注解,并标注要绑定属性的类

@SpringBootApplication
@EnableConfigurationProperties(UserInfo.class)
public class SpringbootConfigurationApplication {
}

步骤②:在对应的类上直接使⽤@ConfigurationProperties进⾏属性绑定

@Data
@ConfigurationProperties(prefix = "servers")
public class UserInfo {private String ip;private int port;
}

使⽤@EnableConfigurationProperties注解时,spring会默认将其标注的类定义为bean,因此⽆需再次声明@Component注解了。

总结
1. 使⽤@ConfigurationProperties可以为使⽤@Bean声明的第三⽅bean绑定属性
2. 当使⽤@EnableConfigurationProperties声明进⾏属性绑定的bean后,⽆需使⽤
@Component注解再次进⾏bean声明

5.5 松散绑定 

宽松绑定:实际上是springboot进⾏编程时⼈性化设计的⼀种体现,即配置⽂件中的命名格式与变量名的命名格式可以进⾏格式上的最⼤化兼容。

在yml配置文件中不管你用下面哪一种命名方式,都会去掉非字母字符转换成小写,从而绑定到类

@Data
@ConfigurationProperties(prefix = "userinfo")//必需全部小写才能绑定。不管配置文件中如何命名
public class UserInfo {
private String ip;
private int port;
}

userinfo:
        userId: zhangsan # 驼峰模式
        user_id: zhangsan # 下划线模式
        user-id: zhangsan # 烤⾁串模式
        USER_ID: zhangsan # 常量模式

以上4种模式最终都可以匹配到userId这个属性名 ,springboot官⽅推荐使⽤烤⾁串模式,也就是中划线模式。

总结
1. @ConfigurationProperties绑定属性时⽀持属性名宽松绑定,这个宽松体现在属性名的命名规则上
2. @Value注解不⽀持松散绑定规则
3. 绑定前缀名推荐采⽤烤⾁串命名规则,即使⽤中划线做分隔符

5.6 数据校验 

SpringBoot给出了强⼤的数据校验功能,可以有效的避免此类问题的发⽣。在JAVAEE的JSR303规范中给出了具体的数据校验标准,开发者可以根据⾃⼰的需要选择对应的校验框架,此处使⽤Hibernate提供的校验框架来作为实现进⾏数据校验。

1.开启校验框架

<!--1.导⼊JSR303规范-->
<dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
</dependency>
<!--使⽤hibernate框架提供的校验器做实现-->
<dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
</dependency>

2.在需要开启校验功能的类上使⽤注解@Validated开启校验功能 

@Component
@Data
@ConfigurationProperties(prefix = "userinfo")
//开启对当前bean的属性注⼊校验
@Validated
public class UserInfo {
}

3.对具体的字段设置校验规则

@Component
@Data
@ConfigurationProperties(prefix = "userinfo")
@Validated
public class UserInfo {//设置具体的规则@Max(value = 100,message = "最⼤值不能超过100")@Min(value = 0,message = "最⼩值不能低于0")private int id;@Size(max=5 ,min=2.message="address超过范围了")private String address;
}

通过设置数据格式校验,就可以有效避免⾮法数据加载,其实使⽤起来还是挺轻松的,基本上就是⼀个格式。


http://www.ppmy.cn/news/347167.html

相关文章

ESXI6.5安装教程

设置从IPMI Virtual Disk 3000启动&#xff0c;出现如下界面&#xff1a; 默认选择第一项&#xff0c;回车安装 安装程序正在检测服务器硬件信息&#xff0c;如果不满足系统安装条件会跳出错误提示。 检测完成之后会出现下面界面 回车 按F11 这里列出了服务器硬盘信息&#xf…

变频2

变频器内部由控制板和驱动板两部分组成&#xff0c;驱动模块现在一般中小功率选用IGBT全控电力电子器件。控制模块一般选用TI的DSP&#xff0c;现有逐步有向ARM切换的倾向。 控制板对外有人机交互接口&#xff0c;对内与驱动板有信号传输。 驱动板到控制板的信号有&#xff1…

【HashMap集合】存储学生对象并遍历

HashMap集合存储学生对象并遍历 1.键是String&#xff0c;值是Student 需求&#xff1a;创建一个HashMap集合&#xff0c;键是学号(String)&#xff0c;值是学生对象(Student)。存储三个键值对元素&#xff0c;并遍历 思路&#xff1a; 定义学生类 创建HashMap集合对象 创建…

软件测试基础知识必备之浅谈单元测试

什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;这里的最小可测试单元通常是指函数或者类。 单元测试都是以自动化的方式执行&#xff0c;所以在大量回归测试的场景下更能带来…

Quartz作业调度框架基本介绍

Quartz作业调度框架基本介绍 1. 定义2. 起源和背景3. 核心功能特点4. 工作原理5. 应用领域6. 优劣分析主要优势劣势 7. 代码示例8.生态系统和社区支持9. 未来发展趋势部分参考资料 1. 定义 Quartz是一个开源的作业调度框架&#xff0c;用于在Java应用程序中实现定时任务和调度…

软件测试将会赢来陌路?

最近参加了某大厂总监做的一场测试培训&#xff0c;感触颇深&#xff0c;一句话萦绕在耳畔“测试乃至测开&#xff0c;大厂为了降本增效这些都要被优化掉”。去年由他操刀优化了一大批优秀的测试员&#xff01; 实际小酋这几年已经有切身体会&#xff0c;测试野蛮增长的阶段已经…

【Unity Shader】平面投影实现阴影

介绍 球体和立方体挂载下面这个shader&#xff0c;就是多渲染一个阴影投影到y0的平面上 // shader&#xff0c;放在需要显示阴影的对象上 Shader "Custom/PlanarShadow1" {Properties{_Instensity("Shininess", Range(2, 4)) 2.0 //光照强度_Diffuse(&…

Sublime Text3中文版下载网址

Sublime Text3 中文版下载网址&#xff1a;https://www.sublimetextcn.com/3/