1

我有两个类,我想在运行时只使用一个类(取决于我是在服务器上运行测试还是在服务器上执行应用程序(本地或其他)),并从 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 设置兼容的解决方案,以便部署可以顺利且无忧。

4

1 回答 1

3

您可以使用配置文件。

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

于 2017-11-28T12:54:27.880 回答