2016-04-25 93 views
0

我有一個應用程序,我想改變存儲在一個文件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; 
    } 

現在,我嘗試通過命令行參數來超越prodpa $$字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冷落的位置PARAM文件名,由於這樣一個字條:

如果您已指定在spring.config.location任何文件,具體的輪廓變體這些文件將不被考慮。使用在spring.config.location的目錄,如果你也想還使用特定的配置文件的屬性。

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

編輯:使用supervisorctl 應用程序正在啓動/停止。

+0

你試過'-Dspring.config。位置=的/ usr /共享/ MyApp的/'? – jny

+0

你可以在這裏查看我對類似問題的回答:http://stackoverflow.com/questions/36635163/spring-boot-externalizing-properties-not-working/36635367#36635367 –

+0

謝謝。我嘗試過,但沒有奏效。事實證明,問題是無關的春天。這是因爲,我是運行應用程序的方式。應用程序運行器(supervisorctl)緩存我的配置文件(在應用程序啓動和停止之間)。對不起,我沒有在我的OP中加入。 – James

回答

0

改變包含java命令配置文件後,必須supervisorctl重讀的變化:

supervisorctl reread 

接下來,激活與變化:

supervisorctl update