2016-08-23 9 views
0

MavenでSpringブートを使用してWebアプリケーションのマルチデプロイメント環境を設定しようとしています。 src/main/resources/configにいくつかの.propertiesファイルを作成しました。 db-dev.propertiesとdb-prod.propertiesはデシベル、特定の情報で構成されます。マルチ環境設定のmavenアプリケーションをtomcatにデプロイできない

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

これらのDBプロパティファイルで定義された変数を読み込み、私はまた、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 

複数のプロファイルは、私のポンポンで設定されています

<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

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 

私はこのエラー、私はこのthreadに基づいてspring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect

とapplication.propertiesの「hibernate.dialect」を設定すると思った。しかし、私は次のエラーのため、ローカルマシン上のTomcatでそれを展開することができませんでした必ずしも冬眠中の方言と関係しているとは限りません。 db接続が成功しなかった場合は、これが表示されることがあります。私は何を取りこぼしたか? warが正しいプロファイルで作成されているかどうか、db- {dev} .propertiesに定義されている変数が選択されているかどうかを判断する方法はありますか?

+0

、すでに設定されているデフォルトのプロパティと一緒に、DEVで再び同じファイル内の同じプロパティを追加してみてください。プロダクト。接頭辞。 '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ファイルを作成する必要はありません。あなたのdb-prod.propertiesファイルで

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

+0

私は別のセットアップがスプリングを使用していたJVM引数-Dspring.profiles.active = xxxを使用してEclipse内でアプリケーションを起動したときのプロファイルしかし、今は戦争としてそれをパッケージ化する必要があります。飛行中に毎回「エクスポート」しなければ、異なる戦争に異なるJVMオプションをとるよう求めることはできません。私の他の[投稿](http:// stackoverflow。com/questions/39081945/how-to-specify-spring-profiles-active-i-run-mvn-install) – ddd

関連する問題