Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从SpringBoot的组件扫描中排除类_Java_Spring Boot_Spring Boot Test_Component Scan - Fatal编程技术网

Java 从SpringBoot的组件扫描中排除类

Java 从SpringBoot的组件扫描中排除类,java,spring-boot,spring-boot-test,component-scan,Java,Spring Boot,Spring Boot Test,Component Scan,我有两个类,我希望在运行时只使用其中一个类(取决于我是在服务器上运行测试还是在服务器上执行应用程序(本地还是其他)),并将另一个从Spring的组件扫描中排除 这里是我想在测试时使用的第一个类: public class HibernateUtilForH2 implements HibernateUtil { private static SessionFactory sessionFactory; static { try { Configuration config

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

我希望在测试时使用DI注入
HibernateUtilForH2
,并将
HibernateUtilForMySql
用于本地服务器上的生产或执行。我该怎么做


我尝试过使用
@TestComponent
@ConditionalOnWebApplication
,但两种方法都不起作用。我需要一个与GitLab的CI/CD设置兼容的解决方案,这样部署就可以顺利、无麻烦。

您可以使用配置文件


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

注释我现在觉得自己太蠢了……这很有魅力。谢谢@Yannic很高兴它对你有用。但是尽量将测试所需的bean保持在最低限度,因为这可能会变得非常混乱。此外,每个@Profile注释都需要在应用程序启动时进行评估,这会导致启动速度变慢(甚至在生产中!)。在任何情况下,上述类都是唯一需要分析的类。其余的都是必须的。