2017-05-25 57 views
0

無論我如何命令它們,Spring引導始終選擇我的application.yml文件中的最後一個配置文件。請幫忙。如果我掏出更多的頭髮,我什麼也沒有留下。彈簧啓動 - 始終使用的最後一個配置文件

  • 使用彈簧引導啓動父1.5.1.RELEASE
  • 的Maven 3.2.5
  • 只有一個在我的神器application.yml。
  • 我在日誌中看到這一點:osboot.SpringApplication.logStartupProfileInfo 641 - 下面的配置文件是活躍:DEV

這裏是我的application.yml:

server: 
    context-path: /MyApplicationUI 
    port: 8480 

--- 
# LOCAL 
spring: 
    profiles: LOCAL 
    datasource: 
    driver-class-name: net.sourceforge.jtds.jdbc.Driver 
    dialect: org.hibernate.dialect.SQLServerDialect 
    username: #insert username# 
    encrypted-password: #insert password# 
    url: jdbc:jtds:sqlserver:blah blah stuff here; 
    jpa: 
    database-platform: org.hibernate.dialect.SQLServerDialect 
    show-sql: true 

--- 
# DEVELOPMENT 
spring: 
    profiles: DEV 
    datasource: 
    driver-class-name: net.sourceforge.jtds.jdbc.Driver 
    dialect: org.hibernate.dialect.SQLServerDialect 
    username: #insert username# 
    encrypted-password: #insert password# 
    url: jdbc:jtds:sqlserver:blah blah stuff here; 
    jpa: 
    database-platform: org.hibernate.dialect.SQLServerDialect 
    show-sql: true 

--- 
# TEST 
spring: 
    profiles: TEST 
    datasource: 
    driver-class-name: net.sourceforge.jtds.jdbc.Driver 
    dialect: org.hibernate.dialect.SQLServerDialect 
    username: #insert username# 
    encrypted-password: #insert password# 
    url: jdbc:jtds:sqlserver:blah blah stuff here; 
    jpa: 
    database-platform: org.hibernate.dialect.SQLServerDialect 
    show-sql: true 

我通過我自己的DatasourceConfig.java加載加密的口令:

public class DatasourceConfig { 

    @Value("${encrypted-password}") 
    private String encryptedPassword; 

    /** 
    * Sets up the datasource with Spring - decrypting password first 
    * 
    * @return Datasource 
    */ 
    @Bean(name = "dataSource") 
    @ConfigurationProperties(prefix = "spring.datasource") 
    public DataSource setupDataSource() { 
     return DataSourceBuilder.create().password(getSecurePassword()).build(); 
    } 

    /** 
    * Decrypts encryptedPassword property 
    * 
    * @return decryptedPassword 
    */ 
    private String getSecurePassword() { 
     System.out.println("Encrypted password = " + encryptedPassword); 
     return new AESEncryptionUtils().decryptString(encryptedPassword); 
} 
... 

我沒有多個模塊,每個:spring boot always using the same profile

千謝謝你給任何人提供見解。

+0

似乎很奇怪,如果您具有執行器相關性,您是否通過/ env端點驗證了活動配置文件? –

回答

0

這個YAML文件看起來更簡潔:

server: 
    context-path: /MyApplicationUI 
    port: 8480 
spring: 
    datasource: 
    driver-class-name: net.sourceforge.jtds.jdbc.Driver 
    dialect: org.hibernate.dialect.SQLServerDialect 
    username: #insert username# 
    encrypted-password: #insert password# 
    url: jdbc:jtds:sqlserver:blah blah stuff here; 
    jpa: 
    database-platform: org.hibernate.dialect.SQLServerDialect 
    show-sql: true 
    profiles: 
    active: default, local 
--- 
# DEVELOPMENT 
spring: 
    profiles: DEV 
    datasource: 
    username: #insert username# 
    encrypted-password: #insert password# 
    url: jdbc:jtds:sqlserver:blah blah stuff here; 
--- 
# TEST 
spring: 
    profiles: TEST 
    datasource: 
    username: #insert username# 
    encrypted-password: #insert password# 
    url: jdbc:jtds:sqlserver:blah blah stuff here; 

您不必重複一切所有的時間,只是「部分」是配置文件之間的變化。默認情況下,使用此配置,將使用的配置文件是:local和/或default

如果您想使用不同的開關,您必須將此開關--spring.profiles.active=DEV(或您需要的標識符)傳遞給命令行上的工件(或腳本,Docker容器等)。

+0

謝謝你的建議。我的洋芋原本更加濃縮,但當我抓着吸管解決問題時,我改變了它。 – Eric

0

我找不出是什麼原因造成了這個問題。我不得不做一個解決方法。我轉而使用屬性文件而不是yaml。我爲每個環境使用了一個單獨的屬性文件,然後明確加載了相應的環境屬性。我必須爲我的datasourceConfig.java執行此操作。不理想,但它工作。

String env1[] = this.environment.getActiveProfiles(); 
InputStream propertiesFile = DatasourceConfig.class.getClassLoader() 
    .getResourceAsStream("application-" + env1[0] + ".properties"); 
prop.load(propertiesFile); 
+0

您是否嘗試了我在其中一個答案中編寫的YAML文件?我想你缺少的是'profiles:active:default'設置 –