java - 从 Spring Boot 的组件扫描中排除类

标签 java spring-boot spring-boot-test component-scan

我有两个类,我只想在运行时使用其中一个类(取决于我是否在服务器上运行测试或执行应用程序(本地或其他)),并将另一个类从 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() 方法声明的接口(interface)。

我希望在测试时使用 DI 注入(inject) HibernateUtilForH2 并使用 HibernateUtilForMySql 在本地服务器上进行生产或执行。我该怎么做?

我尝试过使用 @TestComponent@ConditionalOnWebApplication 但似乎都不起作用。我需要一个与 GitLab 的 CI/CD 设置兼容的解决方案,以便部署能够顺利无忧。

最佳答案

您可以使用配置文件。

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

进行集成测试

关于java - 从 Spring Boot 的组件扫描中排除类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47529808/

相关文章:

java - 在测试主题类中调用时,Mockbean 不会抛出错误

java - 将 Stream 转换为字符串 Java/Groovy

java - 在 Java 中用字符串替换字符串

spring-boot - 这个表达式在 thymeleaf 表单验证中意味着什么?

spring-boot - SpringBoot @MockBean 和 @WebMvcTest 不起作用

java - Spring Boot 与 @PostConstruct 的集成测试取决于 @Before 部分

java - 无法打印俄语字符

java - 在 Spring Data REST 中配置多对多关系,以便删除一个对象不会删除另一个对象

java - 从Java代码中搜索Keycloak中的用户

java - spring-boot 在单个 Web 应用程序路径上设置基本身份验证?