在应用程序中有很多配置项,例如数据库连接地址、日志文件位置、应用服务器配置等等。为了安全与灵活性,我们推荐将Spring Boot的配置文件放在生产环境的服务器上,并严格控制访问权限。在运行应用时可以通过命令行参数指定配置文件:
java -jar location_of_your_jar_file.jar --spring.config.location=location_of_your_config_file.properties
这样做的好处是:
- 配置位于生产环境中,数据库连接等私密信息不容易泄露
- 灵活性强,同一份代码(包括构建的jar包)可以应用于不同的环境配置(开发、测试、生产)
使用Profile区分环境
在某些情况下,应用的某些业务逻辑可能需要有不同的实现。例如邮件服务,假设EmailService
中包含的send(String email)
方法向指定地址发送电子邮件,但是我们仅仅希望在生产环境中才执行真正发送邮件的代码,而开发环境里则不发送以免向用户发送无意义的垃圾邮件。
我们可以借助Spring的注解@Profile
实现这样的功能,这样需要定义两个实现EmailService
借口的类:
@Service
@Profile("dev")
class DevEmailService implements EmailService {
public void send(String email) {
//Do Nothing
}
}
@Service
@Profile("prod")
class ProdEmailService implements EmailService {
public void send(String email) {
//Real Email Service Logic
}
}
@Profile("dev")
表明只有Spring定义的Profile为dev
时才会实例化DevEmailService
这个类。那么如何设置Profile呢?
在配置文件中指定
在application.properties
中加入:
spring.profiles.active=dev
通过命令行参数
java -jar app.jar --spring.profiles.active=dev
另一篇更为详细的方法,基本差不多:
http://www.cnblogs.com/java-zhao/p/5469183.html