私は Spring Boot を使用して 2 つのアプリケーションを開発しています。1 つはサーバーとして機能し、もう 1 つはクライアント アプリケーションです。ただし、どちらもアクティブ プロファイルに基づいて異なる機能を果たす同じアプリケーションです。私は Spring Boot の自動構成機能を使用してアプリケーションを構成しています。
クライアント アプリではデータベース接続が必要ないため、データベース関連の自動構成をすべて無効にしたいと考えています。アプリケーションはデータベースとの接続を確立しようとしたり、Spring Data または Hibernate の機能を使用したりしないでください。データベースの自動構成の有効化または無効化は、条件付きで、アプリのアクティブ プロファイルに基づいて行う必要があります。
それぞれのプロファイルに 2 つの異なる application.properties ファイルを作成することでこれを実現できますか?
これをプロパティファイルに追加してみましたが、
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration
しかし、アプリケーションは起動時にデータベースへの接続を試行します。これらの除外は要件を満たすのに十分でしょうか?
ベストアンサー1
私が同様のことを行う方法は次のとおりです。
@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Profile ("client_app_profile_name")
public class ClientAppConfiguration {
//it can be left blank
}
サーバー アプリ用に同様のものを記述します (除外なし)。
最後のステップは、メインの Spring Boot クラスから自動構成を無効にすることです。
@SpringBootApplication
public class SomeApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SomeApplication.class);
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SomeApplication.class);
}
}
着替える@SpringBootApplication
:
@Configuration
@ComponentScan
これでうまくいくはずです。さて、例で除外した依存関係は不完全かもしれません。私にとっては十分でしたが、データベース関連のライブラリを完全に無効にするのにこれで十分かどうかはわかりません。以下のリストをチェックして確認してください。
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#自動構成クラス