実行時にクラスを1つしか使用しません(テストを実行しているか、サーバー上でアプリケーションを実行しているかによって異なります)もう1つはSpringのComponent Scanningのものです。SpringBootのComponentScanからクラスを除外する
ここでは、テスト時に、私が使用したいファーストクラス:
public class HibernateUtilForH2 implements HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
Configuration configuration = new Configuration().configure("hibernate.cfg.xml.h2");
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
sessionFactory = configuration.buildSessionFactory(builder.build());
} catch (Exception ex) {
throw new ExceptionInInitializerError(ex);
}
}
public Session openSession() {
return sessionFactory.openSession();
}
}
がここで生産またはローカル実行時の使用のための第二のクラスです:
public class HibernateUtilForMySql implements HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
sessionFactory = configuration.buildSessionFactory(builder.build());
} catch (Exception ex) {
throw new ExceptionInInitializerError(ex);
}
}
HibernateUtil
ここではの宣言を含むインタフェースであり、 openSession()
メソッドのみ。
テスト時にHibernateUtilForH2
をDIを使用して注入し、ローカルサーバーで生産または実行するためにHibernateUtilForMySql
を使用したいとします。それ、どうやったら出来るの?
私は@TestComponent
と@ConditionalOnWebApplication
を使ってみましたが、どちらもうまくいかないようです。私は、GitLabのCI/CDセットアップと互換性のあるソリューションが必要です。これにより、展開がスムーズで手間のかからないようにすることができます。
との統合テストのためにロードされるべきではないコンポーネントのためにロードする必要があるコンポーネントを使用して統合テストに注釈を付けますチャーム。ありがとう@Yannic –
それはあなたのために働いてうれしい。しかし、テストに必要な豆だけを最低限に保つようにしてください。これは本当に乱雑になる可能性があるためです。さらに、@Profileアノテーションは、アプリケーションの起動時に評価される必要があり、起動が遅くなります(EVEN IN PRODUCTION!) –
注目。いずれにせよ、上記のクラスだけがプロファイリングを必要とするクラスです。残りのいずれかが必要です。 –