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