了解SpringBoot配置文件
配置文件
SpringBoot默认会从以下几个位置加载配置文件application.properties
(或application.yml
):
1、当前目录下的配置文件子目录:与xx.java
同级的config\xxx.properties
2、当前文件夹:与xxx.java
同级的xxx.properties
3、类路径下的配置文件子目录:classtpath:/config/xxx.properties
4、类路径下(classpath:
根路径):classtpath:xxx.properties
上面的列表按数字大小分优先级,数字越小,优先级越高;同优先级时
application.properties
文件比application.yml
文件优先级高如果配置文件的名称不是默认的,可以通过
spring.config.name
属性指定配置名称如果配置文件的路径不是默认路径,可以通过
spring.config.location
属性指定
profile
spring boot支持多环境属性配置,在开发时我们往往会使用多套的属性,开发时用一套属性的值、测试时一套、发布时又用一套,所以就需要配置不同的环境来应对这种变换。
我们可以命名时在使用 在文件名称中添加profile参数,类似下面这种(下面是以YML文件为例,properties文件也是同样的,使用properties文件的规则即可)
- application-dev.yml
- application-test.yml
- application-prod.yml
然后在主配置文件application.yml
中指定需要使用哪一套配置文件中的属性值
spring:
profiles:
# active: dev #直接在配置中写死,指定用dev这套配置
active: @profileName@ #maven打包时(maven package -P profile)指定的profile,会自动替换掉这里的占位符
启用指定的profile配置
spring boot命令行启动时指定profile
java -jar xxxx.jar -spring.profiles.active=test
maven打包时指定profile
使用这种方式需要在pom
文件中添加下面的这些设置
<!-- 配置maven打包时-P参数支持哪些profile -->
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<profileName>dev</profileName>
</properties>
<!-- 如果打包时没有指定-P参数,默认使用activeByDefault为true的profile -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<properties>
<profileName>test</profileName>
</properties>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<properties>
<profileName>prod</profileName>
</properties>
</profile>
</profiles>
<build>
<plugins>
<!-- maven resource插件功能: 主要是操作配置文件相关。比如用maven中的变量替换项目中配置文件中的占位符,显示指定非maven标准resources目录为resources -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<!-- 指定配置文件中的占位符是@ -->
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
有了上面的配置之后就可以适用maven的命令来控制要使用的环境
maven clean package -Dmaven.test.skip=true -P dev
代表打包时启用dev(开发)环境的配置,其实有了这个插件就可以不使用maven的命令来启用环境的配置,如下图所示
直接在配置文件中写死
在application.yml中通过下面的属性
spring:
profiles:
active: dev #直接在配置中写死,指定用dev这套配置
写死的方式指定要启用的profile(只适合开发环境)
支持的属性清单
由于官方给出的支持的属性清单内容非常多,所以这里就不一一展示了,需要使用的同学通过下面的传送门去查阅
传送门:官方配置属性清单
类型安全的Properties读取
当系统中参数值很多时,我们往往会将配置参数分门别类,然后通过@ConfigurationProperties
注解直接将读取到的值封装到一个JavaBean上
示例
在src/main/resources
下新建config.properties
demo.phone=10086
demo.wife=self
创建ConfigBeanProp类并注入config.properties中的值:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* 注:本类只是演示怎么读取自定义的配置文件,数据源还是直接通过Spring通过类型安全方式直接将读取到的属性封
* 装到POJO类上省去了在每个属性上写@Value注解。适用于属性比较多,都以指定前缀开始的属性读取
*
* @author 召
*/
@Component
@ConfigurationProperties(prefix = "demo")
@PropertySource(value = "config.properties")
public class ConfigBeanProp {
private String phone;
private String wife;
/**
* 省略Set、Get方法
*/
}
@Value注解读取application.properties参数
还是使用上面的例子,上面的方式适用的是属性很多,但是有共同的前缀。而@Value注解更多是应用于属性很少,或者没有共同的前缀的方式。
@Component
@PropertySource(value = "config.properties")
public class ConfigBeanProp {
@Value("${demo.phone}")
private String phone;
@Value("${demo.wife}")
private String wife;
/**
* 省略Set、Get方法
*/
}
设置日志级别
logging:
level:
root: info # 设置全局日志显示info级和info级以上
org.hibernate: ERROR # 设置这个包中的文件的日志显示ERROR级和ERROR级以上的
org.springframework.web: DEBUG # 设置这个包中的文件的日志显示DEBUG级和DEBUG以上级的