2014-12-01 120 views
9

我想配置我的Spring Boot應用程序以在特定的環境變量存在時使用特定的數據源。例如,如果存在MY_PROD_DATASOURCE環境變量,我想使用我的生產數據源;否則,我想使用我的本地數據源(相同類型)。基於環境的彈簧數據源

我發現了something in the Spring reference,它解釋瞭如何在我的application.properties中聲明單個數據源。具體來說,一個MySQL數據源可能看起來像:

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 

不過,我不明白我怎麼可以在這個文件中有條件地更改數據源的屬性。還有另一種方法可以做到嗎?

+0

您可以使用不同的數據源文件定義多個會話工廠。 http://stackoverflow.com/questions/20541736/hibernate-configuring-multiple-datasources-and-multiple-session-factories – 2014-12-01 17:12:00

+0

你能擴展一點嗎?也許在一個答案? – nmagerko 2014-12-01 17:26:59

回答

10

在春季啓動,您可以:從你的罐子

  1. 外部化application.properties並通過添加路徑作爲啓動參數提供每個環境文件:

    java -jar your-app.jar --spring.config.location=/path/to/app.properties 
    
  2. 使用Spring配置文件。每個配置文件創建application-${profile}.properties,在每一個不同的數據源屬性

    使用Spring配置文件的

  3. ,而是application.properties,把你的屬性application.yaml在那裏你可以使用如下約定把性能適用於所有環境:

    spring: 
        profiles: development 
    server: 
        port: 9001 
    
    --- 
    
    spring: 
        profiles: production 
    server: 
        port: 0 
    

瞭解更多關於How to change configuration depending on the environment的Spring Boot參考部分。

+0

這看起來像我想要做的!然而,我有一個後續問題:這是否意味着我不能在我的應用程序中使用'@ Configuration'和/或'@ EnableAutoConfiguration'註釋? – nmagerko 2014-12-01 20:22:15

+1

你可以,你應該。 – 2014-12-01 20:57:48