Java 从SpringBoot的组件扫描中排除类
我有两个类,我希望在运行时只使用其中一个类(取决于我是在服务器上运行测试还是在服务器上执行应用程序(本地还是其他)),并将另一个从Spring的组件扫描中排除 这里是我想在测试时使用的第一个类: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
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注释都需要在应用程序启动时进行评估,这会导致启动速度变慢(甚至在生产中!)。在任何情况下,上述类都是唯一需要分析的类。其余的都是必须的。