一般来说,开发、测试、生产的环境都不一样,反复修改配置文件比较麻烦,还容易出错,项目在pom.xml文件中使用了profiles属性,配置了多套环境,有两个比较关键的问题
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties> <jdbc.url>jdbc:mysql://127.0.0.1:3306/test</jdbc.url>
<jdbc.username>test</jdbc.username>
<jdbc.password>test</jdbc.password>
<redis.nodes>127.0.0.1:9000</redis.nodes>
</properties>
</profile>
<profile>
<id>sa</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<jdbc.url>#{jdbc.url}</jdbc.url>
<jdbc.username>#{jdbc.username}</jdbc.username>
<jdbc.password>#{jdbc.password}</jdbc.password>
<redis.nodes>#{redis.nodes}</redis.nodes>
</properties>
</profile>
</profiles>
- 部署时如何选择环境?
- 使用maven打包时,idea上选择对应环境即可
- 代码中需要使用这些变量时,如何获取?
- 其实有很多种方法,我提供一种比较偷懒的法子,在Spring配置文件中定义Bean,然后建立相关类,这样spring框架会自动注入这个类,代码如下
<bean id="Variables" class="com.util.Variables">
<property name="redis_nodes" value="${redis.nodes}"/>
</bean>
public class Variables {
static String redis_nodes;
public static String getRedis_nodes() {
return redis_nodes;
}
public void setRedis_nodes(String redis_nodes) {
this.redis_nodes = redis_nodes;
}
}
- 出于安全考虑,线上环境的一些参数,并不会直接写到pom文件中,而是在部署时,通过docker替换;
- 测试环境,部署的时候用的也是pom文件下的生产环境,只是在替换时,用的测试环境参数;
- 这样做的好处是进一步确保上线安全,之前有过生产环境参数和测试环境参数不一致的情况