如何覆盖类路径外的spring活动配置文件?

时间:2014-09-09 14:14:24

标签: java spring spring-boot spring-profiles

我希望能够在类路径之外放置application.properties(例如在d:/上),并定义spring.profile.active=production

如果激活此选项,spring还应该从名为my-production.properties的类路径中加载属性文件。

我尝试了以下操作,但没有用。我可能忘记了什么?

@Component
@PropertySources({
    @PropertySource("classpath:my-default.properties"),
    @PropertySource(value = "file:D:/my.properties"),
    @PropertySource(value = "classpath:my-${spring.profiles.active}.properties", ignoreResourceNotFound = true)
})

d:\ my.properties:

spring.profiles.active=production

my-default.properties:

testkey=default

my-production.properties:

testkey=production

应用:

@Configuration
@EnableAutoConfiguration
public class AppCfg {

    @Value("${testkey}")
    private String testkey;

    @PostConstruct
    public void init() {
        Sysout(testkey); //prints: "default" instead of "production"
    }
}

1 个答案:

答案 0 :(得分:3)

如果要将applciation属性放在其他位置,可以使用命令行参数或环境变量。 请参阅 21.2应用程序属性文件部分 http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

如果您只想设置有效个人资料,请查看 21部分。外部化配置 例如,您可以使用OS environment variables覆盖活动的配置文件属性。

您可以设置SPRING_CONFIG_NAMESPRING_CONFIG_LOCATION环境变量以手动设置application.properties的位置。您也可以使用当前目录的/config子目录或 加载application.properties的当前目录。