의 ComponentScan에서 클래스를 제외하고 제외 다른 하나는 Spring의 Component Scanning에서 가져온 것입니다. 여기(내가 테스트를 실행하거나), 그렇지 않으면 (로컬 또는 서버에서 응용 프로그램을 실행입니다 경우에 따라)있는 내가 런타임에 하나의 클래스를 사용하고자에서 나는이 개 수업을 SpringBoot
내가 테스트 할 때 사용할 1 등석 : 여기
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 설치와 호환되는 솔루션이 필요합니다.
과의 통합 테스트를 위해로드 할 수 없습니다해야하는 구성 요소로드해야
@ActiveProfiles("test")
및 구성 요소와 통합 테스트 ... 이것은처럼 일 매력. 감사합니다 @Yannic –당신을 위해 일했다 다행. 이 정말 난장판이 될 수 있기 때문에 그러나, 단지 최소한으로 테스트에 필요한 콩을 유지하려고합니다. 또한 모든 @Profile 주석은 시작시 느린 시작을 유발하는 응용 프로그램 시작시 평가되어야합니다 (EVEN IN PRODUCTION!) –
Noted. 어쨌든 위에서 언급 한 클래스 만 프로파일 링이 필요한 클래스입니다. 나머지는 어느 쪽이든 필요합니다. –