如何覆盖Spring Boot库属性?

时间:2019-05-30 18:46:13

标签: java spring-boot

我想覆盖我在使用它的项目中编写的库属性。我正在使用这个Spring指南来创建库:https://spring.io/guides/gs/multi-module/

我想知道如何在使用我的库的项目中覆盖例如my.properties文件。

有可能吗?

4 个答案:

答案 0 :(得分:2)

请勿将application.properties文件添加到库中。这可能会导致许多问题。如果要设置默认属性,请执行以下操作:

@ConfigurationProperties("foo")
public class FooConfig {

    private int bar = 999;

    // getter / setter

}

每个应用程序都应在自己的application.properties文件中为其自身配置库值。

答案 1 :(得分:0)

似乎不能。由于Spring本身也不能

  

在上面的示例中,我们使用@SpringBootTest批注的默认属性为测试配置了service.message。不建议将application.properties放在库中,因为使用它的应用程序在运行时可能会发生冲突(从类路径中仅加载过一个application.properties)。您可以将application.properties放在测试类路径中,但不将其包含在jar中,例如,将其放在src / test / resources中。

答案 2 :(得分:0)

Spring Boot属性顺序优先级描述如下:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

通过链接:

Spring Boot uses a very particular PropertySource order that is designed to allow sensible overriding of values. Properties are considered in the following order:

那么顺序是1-17。例如,列表(命令行参数)上的4会覆盖列表(您的application.properties文件)上的15,依此类推。

答案 3 :(得分:0)

取决于库属性文件如何指定属性。如果首先从环境/系统中查找属性,则可以在代码中覆盖。如果是硬编码,则不会。 例如:

prop=${ENV_VAR:abc}

您可以在代码中设置ENV_VAR环境变量或env-var系统变量以覆盖prop的值。否则,将使用默认值abc