代码之家  ›  专栏  ›  技术社区  ›  Akshay Singh Rinoy Ashokan

从SpringBoot的ComponentScan中排除类

  •  1
  • Akshay Singh Rinoy Ashokan  · 技术社区  · 7 年前

    我有两个类,我想在运行时只使用其中一个类(取决于我是在服务器上运行测试还是执行应用程序(本地还是其他))并将另一个从Spring的组件扫描中排除。

    这里是我在测试时要使用的第一个类:

    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设置兼容的解决方案,这样部署就可以顺利、无障碍地进行。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Yannic Bürgmann    7 年前

    您可以使用配置文件。

    用注释您的集成测试 @ActiveProfiles("test") 以及应加载用于集成测试的组件 @Profile("test") 以及不应加载用于集成测试的组件 @Profile("!test")