如何使用配置文件外部化Spring Boot中的配置?

时间:2016-04-25 20:01:29

标签: spring properties configuration spring-boot supervisord

我有一个应用程序,我想更改存储在application.yml文件中的数据源密码。 YML文件中的密码存储如下:

----
spring:
    profiles: production
datasource:
    password: prodpassword

注意:我也有开发和阶段的配置文件。

密码道具使用ConfigurationProperties在类上设置,如下所示:

@Component
@ConfigurationProperties(prefix="datasource")
public class DataSourceConnector {

    private password;

    public void setPassword(String password) {
        this.password = password;
    }

现在,我尝试通过命令行arg使用prodpa $$ word覆盖prodpassword,但它不起作用:

java -Dspring.profiles.active=production -jar /usr/share/myapp/myapp-1.0.jar --datasource.password='prodpa$$word'

我还尝试在jar之外创建一个相同的(除了新密码)application.yml文件。这也不起作用。

java -Dspring.profiles.active=production -jar /usr/share/myapp/myapp-1.0.jar --spring.config.location=/usr/share/myapp/

注意:由于来自http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-profile-specific-properties的此便笺,我在位置参数中遗漏了文件名:

  

如果您在spring.config.location中指定了任何文件,则不会考虑这些文件的特定于配置文件的变体。如果您还想使用特定于配置文件的属性,请使用spring.config.location中的目录。

如何覆盖jar的application.yml中的datasource.password?

编辑: 使用supervisorctl启动/停止应用程序。

1 个答案:

答案 0 :(得分:0)

更改包含java命令的配置文件后,supervisorctl必须重新读取更改:

supervisorctl reread

接下来,使用以下命令激活更改:

supervisorctl update