</br>
SpringBoot文件的配置
默认配置
SpringBoot有两种全局配置文件,可以对一些默认的配置进行修改,如数据库连接、日志设置、以及自定义属性的配置。
application.properties
application.yml
程序启动的时候会默认加载配置文件,配置文件放在src/main/resources目录或者类路径/config下,配置文件的路径是有优先级的
两种配置文件,只做关于yml简单介绍,更多的使用可自行在网络上进行搜索以下将以yml配置文件为例
基本配置
YML基本介绍官方地址
YAML (YAML Aint Markup Language)是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。
YAML基本语法规则
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格。
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
示例1
2
3
4
5
6
7
8server:
port: 8080
servlet:
context-path: /
tomcat:
uri-encoding: UTF-8
max-threads: 800
min-spare-threads: 30此处对于yml不做过多的介绍,网络上有很多是资料YAML教程
获取配置的方法
在程序中通过@ConfigurationProperties和@Value注解获取属性,下面介绍这两种获取值的方式
@ConfigurationProperties与@Value区别
首先在application.yml配置文件中自定义一个属性
application.yml配置文件中1
2
3com:
name: "姓名"
descriptive: "自定义"
@ConfigurationProperties
1 | /** |
通过@Autowired注解获得配置文件的类属性
@Autowired
CustomPropertiesConfig customPropertiesConfig;
获得配置文件中的值customPropertiesConfig.getName();
@Value
1 | /** |
通过@Autowired注解获得配置文件的类属性@Autowired
CustomPropertiesValueConfig customPropertiesValueConfig;
customPropertiesValueConfig.getName();
{% note warning %}
如果所声明的类是一个组件,则需要在实体类上需要加上@Component
如果需要使用表达式只有@Value才可以,@Value("#{2*2}) 结果为:4
{% endnote %}
使用场景
{% note info no-icon %}
只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
编写了一个javaBean来和配置文件进行映射,使用@ConfigurationProperties;
{% endnote %}
加载外部配置文件
如果将所有的配置信息全部写到一个配置文件中的话,如果配置东西过多,不便于维护,可以进行拆分,拆分到多个文件中,然后通过引用进行使用
- @PropertySource(value={“classpath:文件名称.properties”})
- @ImportResource(locations={“classpath:文件名称.xml”}
- @Configuration和@Bean方式
@PropertySource
@PropertySource(需要注入的类的前面使用该注解)
1
2
3
4
5
6
7
8@Component
@ConfigurationProperties(prefix = "test")//这个不能注,注了就会报错
@PropertySource(value ={"classpath:test.properties"}) //value的值可以是数组
public class TestPropertiesConfig {
private String name;
private Integer age;
省略get/set
}
@ImportResource
@ImportResource(在主函数SpringBootApplication前面使用该注解)
@Configuration和@Bean方式
1 | /** |
多环境切换
在项目开发中会遇到多个环境的切换,如开发环境、生成环境、测试环境,在主配置文件中通过
1
2
3spring:
profiles:
active: dev
1. application.yml 主配置文件
2. application-dev.yml 开发环境
3. application-prod.yml 生产环境
4. application-test.yml 测试环境
在主配置文件中切换 active:后面的值来进行环境切换
java –jar xxx.jar –spring.profiles.active=dev
配置文件的加载顺序
前文说过 “配置文件放在src/main/resources目录或者类路径/config下,这个配置文件的路径是有优先级的。”
springboot启动的时候会扫描配置文件作为springboot的默认配置文件。
项目路径下的config文件夹 file:./config/ [需注意此路径下配置文件打成jar包时,不会出现在jar包中]
项目路径下 -file:./
classpath路径下config文件夹-classpath:/config/
classpath路径下 -classpath:/
以上加载顺序是按照优先级从高到低的顺序,所有位置的文件都会被加载,如果冲突的情况,高优先级配置内容会覆盖低优先级配置内容。
如果不冲突,形成互补配置(共同作用,一个文件没有另一个有的会一起都会产生作用)。
可以通过配置spring.config.location来改变默认配置。使用命令行方式加载,否则优先级不够。
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置
java -jar 项目名称.jar –spring.config.location=配置文件路径 (如D:/application.yml)外部配置加载顺序
SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
命令行参数所有的配置都可以在命令行上进行指定(java -jar 项目名称..jar –server.port=8087 –server.context-path=/abc多个配置用空格分开; –配置项=值)
来自java:comp/env的JNDI属性
Java系统属性(System.getProperties())
操作系统环境变量
RandomValuePropertySource配置的random.*属性值
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
jar包外部的application.properties或application.yml(不带spring.profile)配置文件
jar包内部的application.properties或application.yml(不带spring.profile)配置文件
@Configuration注解类上的@PropertySource
通过SpringApplication.setDefaultProperties指定的默认属性
所有支持的配置加载来源:官方参考文档结束
以上内容除了外部配置加载顺序使用较少,其他都是在程序中经常使用的,每个都经过代码的验证,如有不对的地方或者待完善的地方,请多多指教。