Java 配置文件动态选择
- 应用背景
- pom文件配置 Profiles
- 配置文件
- maven资源插件配置
- yml配置文件指定pom文件中的配置项
- 实例如下
应用背景
在开发过程中,Java运行会面临不同的运行环境,比如开发环境、测试环境、生产环境,在不同的开发环境下所需要配置的数据信息可能不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,为了避免这些繁琐的操作以及出现运行错误,maven提供了一种方便的解决这种问题的方案,通过进行pom文件的配置。
pom文件配置 Profiles
在项目的profile中添加如下的profile配置:
<profiles>
<profile>
<!-- 本地环境-->
<id>loc</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<environment>loc</environment>
</properties>
</profile>
<profile>
<!-- 开发环境-->
<id>pms</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<environment>pms</environment>
</properties>
</profile>
<profile>
<!-- 生产环境-->
<id>prod</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<environment>prod</environment>
</properties>
</profile>
</profiles>
这里定义了三个环境,分别是loc(本地环境)、pms(开发环境)、prod(生产环境),其中本地环境是默认激活的(activeByDefault 为true)。
<activeByDefault>true</activeByDefault>
配置文件
针对不同的开发环境,我们定义了不同的配置文件,文件目录如下:
如图所示,本地环境、开发环境、生产环境的配置文件分别放到src/main/resources目录下。
maven资源插件配置
在pom.xml的build结点下,配置资源文件的位置,如下所示:
<build>
<finalName>pms</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<!-- 定义了变量配置文件的地址 -->
<directory>src/main/resources</directory>
<includes>
<include>**/**.xml</include>
<include>application.yml</include>
<include>application-${environment}.yml</include>
</includes>
<!-- 一定要设置成true -->
<filtering>true</filtering>
</resource>
</resources>
</build>
这里注意一个参数 filtering ,一定要设置成true.这样才会用对应${environment}的配置文件覆盖原来的。
yml配置文件指定pom文件中的配置项
在 application.yml 公共配置文件中需指定profiles的激活项:
spring:
profiles:
active: @environment@
@environment@ 参数指向的是pom文件中的 environment 标签,需使用@符号。
然后程序在运行时根据拼接的文件名,读取对应配置文件下的配置数据源。
实例如下
配置完成后,idea则有如下快捷选项,若指定Profiles下的 loc
application-loc.yml 内的配置内容为:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
# 本地
url: jdbc:mysql://localhost:3306/mallpms?useSSL=false&useUnicode=true&characterEncoding=UTF8
username: root
password: 654321
type: com.alibaba.druid.pool.DruidDataSource
若指定Profiles下的 prod,application-prod.yml内的配置内容为:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
#正式
url: jdbc:mysql://192.168.1.102/mallpms?useSSL=false
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
启动项目后,Java会自动读取相应配置文件中的数据源,实现不同开发环境下配置文件的动态选择。