2016-12-01 133 views
2

我使用spring boot 1.4.2,現在嘗試設置屬性。Spring Boot如何在yaml的application.properties中設置spring.config.location

我有四個病例的使用的.properties.yml到外部(內部資源)和本地文件系統(外項目文件夾)。

的.properties外部(內部資源文件夾)效果很好既@Value($ {} property.name)@PropertySource最後一個使用價值屬性可以從文件系統加載像下面。

@Component 
@PropertySource(value="file:C:\\properties\\application-dev.properties") 
@PropertySource(value="file:C:\\properties\\application-test.properties") 
public class ExternalProperties { 
    // ... 
} 

.yml沒有行之有效的資源文件夾下時,文件名「application.yml」

的.yml可以通過@ConfigurationProperties和需要「propdeps-插件」加載

我.yml文件

environments: 
    dev: 
     url: http://dev.bar.com 
     name: Developer Setup 
    prod: 
     url: http://foo.bar.com 
     name: My Cool App 

此代碼工作得很好

@Component 
// external(inside resources) 
@ConfigurationProperties(prefix="environments") 
// outside project folder 
@ConfigurationProperties(locations={"file:C:\\properties\\application.yml"}, prefix = "environments") 
public class YamlProperties { 

    private Map<String, String> dev = new HashMap<>(); 
    private Map<String, String> prod = new HashMap<>(); 

    public Map<String, String> getDev() { 
     return this.dev; 
    } 

    public Map<String, String> getProd() { 
     return this.prod; 
    } 
} 

該代碼具有棄用位置屬性(我看了很多文章,但無法弄清楚清楚),所以我需要找到API文檔,找到「ConfigFileApplicationListener」從這個section問題。

# SPRING CONFIG - using environment property only (ConfigFileApplicationListener) 
spring.config.location= # Config file locations. 
spring.config.name=application # Config file name. 

因此,在application.properties這樣的屬性上面寫上。

spring.config.location=file:C:\\properties\\application.yml 
spring.config.name=application 

和重裝.yml屬性(我沒有嘗試EXCUTE罐子。我用通過控制器戰爭和測試)

@Component 
@ConfigurationProperties(prefix="environments") 
public class YamlProperties { 

    private Map<String, String> dev = new HashMap<>(); 
    private Map<String, String> prod = new HashMap<>(); 

    public Map<String, String> getDev() { 
     return this.dev; 
    } 

    public Map<String, String> getProd() { 
     return this.prod; 
    } 
} 

此代碼不是從本地文件加載.yml系統C:驅動器,但是當在資源文件夾中添加application.yml文件時效果很好。

那麼如何設置spring.config.location負載.yml

而且我想知道爲什麼位置屬性適用尚未雖然自1.4版本棄用。

並想知道如何使用ConfigFileApplicationListener我無法跟蹤代碼很難理解給一些提示〜!

編輯:

我想念明白這個,當戰爭再次啓動,使 的上下文中再使用本地文件系統屬性。這不是 收集鏈接它,但仍然爲未來的步驟。

將tomcat重啓不是戰爭部署新的,所以我對 本地系統中的文件也包含屬性,如果我改變這個文件的數據,當tomcat的重啓 可以udated屬性的環境。

爲什麼我繼續嘗試這個工作,我使用公共github帳戶,並保護 連接數據庫信息的其他東西。我得到這個東西,然後繼續下一個 問題,如git-encrpt,spring-cloude,nginx,docker。謝謝你真的幫助 任何幫助。

+0

你最好試試'bootstrap.yml'配置並指定你想要的配置。比如'spring.config.location'。如果你使用'bootstrap.yml',請記住添加'org.springframework.cloud:spring-cloud-context'的依賴關係。爲了簡單起見,'spring-cloud-context'會自動加載'bootstrap.yml',並且配置也可以自動加載。另一種方法是通過'-Dspring.config.location ='或'--spring.config.location ='等命令行參數指定。前格式的參數應該出現在'-jar'選項之前。 –

+0

實際上,'yml'擴展名通常被用在Spring框架中,而不是'yaml'。最簡單的方法是將你的引導配置文件命名爲'bootstrap.yml'在你的'resources'文件夾中。示例[https://github.com/soiff-spring/spring-boot-example.git](https://github.com/soiff-spring/spring-boot-example.git)可以做一些幫助。 –

+0

感謝春天的雲信息我會嘗試下一步,我更新名稱yaml到yml,但仍然不起作用。感謝您的新信息@GeminiKeith –

回答

1

由於您使用的是spring 1.4.2,所以一切都很簡單。您只需爲應用程序指定其他參數,如java -jar name-of-application-version.jar --spring.config.location=file:///C:/properties/application.yml。實現此目的的更常見方法是爲JVM定義附加選項,如java -Dspring.config.location=file:///d:/private-bootstrap.yml -jar name-of-application-version.jar。這兩種方法都可以工作,因爲它們可以在我的桌面上正常工作。

+0

謝謝你的幫助@GeminiKeith戰爭情況如何?在真正部署到tomcat上它工作正常嗎?其實我使用公共github,我也知道任何其他好的解決方案,但嘗試第一個簡單的方法。 構建war文件後,它包含具有本地文件系統屬性信息的bean。如何將jar文件保存從命令行注入的信息?我剛剛瞭解過去發展情況的-jar。 –

+0

我有一些小姐瞭解我的評論,它是刷新屬性上下文信息,當tomcat重新啓動。所以jar,war沒有永久保存上下文信息。我想澄清我提到的感謝。 @GeminiKeith –

+0

它實際上是在tomcat下部署的一場戰爭。但是,如果您想要保持您的配置並使其在下次啓動時可用,則需要完成更多工作。這並不像您想象的那麼簡單,您最好將您的要求作爲另一個要討論的問題發佈。一個很好的解決方案是spring cloud config。通過這種方式,您不需要在參數中指定太多設置,而無需在[spring cloud config](http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html)中指定它們。 –

相關問題