2016-08-23 95 views
0

我想爲使用Spring Boot和Maven的web應用程序配置多個部署環境。在src/main/resources/config下創建了幾個.properties文件。 db-dev.properties和db-prod.properties包括DB的具體信息:具有多環境配置的maven應用程序無法在tomcat上部署

db.url=jdbc:oracle:thin:@ldap://dev.com/risstg3, 
db.username=owner 
db.password=godzilla 

在同一目錄中我也有application.properties其內容在這些數據庫屬性文件中定義的變量

#database info 
spring.datasource.driverClassName=oracle.jdbc.OracleDriver 
spring.datasource.url=${db.url} 
spring.datasource.username=${db.username} 
spring.datasource.password=${db.password} 

#hibernate config 
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect 

多個配置文件設置在我的POM:

<profiles> 
    <profile> 
     <id>dev</id> 
     <properties> 
      <env>dev</env> 
     </properties> 
    </profile> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <env>prod</env> 
     </properties> 
    </profile> 
    </profiles> 
    <build> 
    <filters> 
     <filter>src/main/resources/config/db-${env}.properties</filter> 
    </filters> 
    <resources> 
     <resource> 
     <directory>src/main/resources/config</directory> 
     <filtering>true</filtering> 
     </resource> 
    </resources> 

所有其他的配置是由春啓動的照顧與@SpringBootApplicati在我的應用程序類的註釋。

然後,我通過使用-P選項指定配置文件來構建戰爭。 mvn install -Pprod。但是我沒能與本地機上的tomcat部署由於以下錯誤:

SEVERE: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ristoreService]] 
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 

我想我設置在此基礎上threadspring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect

在application.properties「hibernate.dialect」,這個錯誤可能不一定與Hibernate方言有關。如果數據庫連接不成功,您可能會看到它。我錯過了什麼?有沒有辦法判斷是否用正確的配置文件創建了戰爭,以及是否已經獲取了在db- {dev} .properties中定義的變量?

+0

在你db-prod.properties文件中,你已經設置的默認屬性一起,嘗試在同一個文件與開發再次增加相同的屬性。和刺激。前綴。 像 'prod.db.url =的jdbc:神諭:薄:@ldap://dev.com/risstg3, prod.db.username =所有者 prod.db.password = godzilla' 接着,如果嘗試作品。 –

+0

是否有任何理由不利用Spring的配置文件功能,因此您不必擔心執行maven過濾? –

+0

@ShawnClark當我使用JVM參數'-Dspring.profiles.active = xxx'在Eclipse內部啓動應用程序以在環境之間切換時,我使用Spring活動配置文件進行了不同的設置,如果這是您所指的。但是,我需要把它打包成一場戰爭,沒有辦法讓不同的戰爭採取不同的JVM選項。看到我的其他[後](http://stackoverflow.com/questions/39081945/how-to-specify-spring-profiles-active-when-i-run-mvn-install) – ddd

回答

1

這是對你的設置的輕微變化,但我認爲這將有助於以更適合Spring的方式解決問題。春天有概況的概念。您可以創建application.properties文件作爲默認設置,然後使用application-${profile}.properties進行配置文件特定設置。如果您創建了application-dev.propertiesapplication-prod.properties,您只需指定一個名爲spring.profiles.active=dev的環境變量即可使用這些環境變量。這樣您就不需要爲每種部署類型創建單獨的jar文件。

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-change-configuration-depending-on-the-environment

+0

我有一個不同的設置使用Spring主動當我在Eclipse中使用JVM參數-Dspring.profiles.active = xxx在環境之間切換時啓動應用程序時的配置文件。然而,現在我需要把它打包成一場戰爭,除非每次運行時'輸出'它都沒有辦法讓不同的戰爭採用不同的JVM選項。看到我的其他[發佈](http:// stackoverflow。COM /問題/ 39081945 /如何到指定彈簧型材,主動當-I-運行MVN安裝) – ddd

相關問題