2017-11-28 8 views
0

의 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 설치와 호환되는 솔루션이 필요합니다.

답변

0

당신은 프로파일과 함께 일할 수 있습니다.

은 주석 통합 @Profile("test")와 시험과 내가 지금 그렇게 바보가 된 기분 @Profile("!test")

+0

과의 통합 테스트를 위해로드 할 수 없습니다해야하는 구성 요소로드해야 @ActiveProfiles("test") 및 구성 요소와 통합 테스트 ... 이것은처럼 일 매력. 감사합니다 @Yannic –

+0

당신을 위해 일했다 다행. 이 정말 난장판이 될 수 있기 때문에 그러나, 단지 최소한으로 테스트에 필요한 콩을 유지하려고합니다. 또한 모든 @Profile 주석은 시작시 느린 시작을 유발하는 응용 프로그램 시작시 평가되어야합니다 (EVEN IN PRODUCTION!) –

+0

Noted. 어쨌든 위에서 언급 한 클래스 만 프로파일 링이 필요한 클래스입니다. 나머지는 어느 쪽이든 필요합니다. –