1. ホーム
  2. spring

[解決済み] Spring Bootのデータベース関連の自動設定をすべて無効にする

2022-04-26 17:36:54

質問

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

しかし、アプリケーションは依然として起動時にデータベースへの接続を試みます。これらの除外は、私の要件を達成するのに十分ですか?

解決方法は?

同じようなことをする方法は。

@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Profile ("client_app_profile_name")
public class ClientAppConfiguration {
    //it can be left blank
}

サーバーアプリにも同様のものを書きます(excludeなし)。

最後のステップは、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/#auto-configuration-classes

ご参考になれば幸いです。