我有一个Spring项目要运行(又名PA),它与其他项目(PB)有依赖关系,而这个项目与其他项目(PC)有依赖关系PB实际上是PC的定制。
问题是,我的PA使用一个不同的数据库模型比PC最初设计的。在PC中有一个@Bean的@Configuration类被恢复查询数据库
@Configuration
public class CoreConfig {
@Bean
public Map<Long, String> translatedActivationStatusMap(ActivationStatusRepository activationStatusRepository,
TranslationUtil translationUtil) {
return activationStatusRepository.findActivationStatusBusinessCodes()
.stream()
.collect(Collectors.toMap(ActivationStatusRow::getId, activationStatusRow -> {
final String translatedPrimaryStatus = translationUtil
.getTranslation(activationStatusRow.getStatusPrimaryBusinessCode(), activationStatusRow.getStatusPrimaryDescription());
final String translatedSecondaryStatus = translationUtil
.getTranslation(activationStatusRow.getStatusSecondaryBusinessCode(), activationStatusRow.getStatusSecondaryDescription());
return String.format("%s - %s", translatedPrimaryStatus, translatedSecondaryStatus);
}));
}
}
字符串
由于上层仓库方法查询的表在PA中配置的DB中不存在,因此会抛出异常:
表或视图不存在
我的解决方法是避免Spring尝试在上下文中加载这样的bean。为了做到这一点,我尝试了几个选项,但它们都有效。
选项1:在PB中创建一个新类,并将其注解为@Configuration,并将返回相同类型的方法注解为@Bean和@Primary。但不起作用。引发了相同的异常
@Configuration
public class CoreConfigSecond {
@Bean
@Primary
public Map<Long, String> translatedActivationStatusMapSecond(ActivationStatusRepository activationStatusRepository,
TranslationUtil translationUtil) {
return new HashMap<>();
}
}
型
选项2:使用@Profile(“test”)注解同一个类,并在应用程序属性中设置属性“spring.profiles.active=test”。
有没有人知道为什么@Primary没有覆盖这个方法?你认为它能解决我的问题吗?
多谢了!
2条答案
按热度按时间ggazkfy81#
我想我有一个想法。Execute @bean方法是在运行时。它执行第一个bean。如果找到另一个带有@Primary的方法,则spring重写该对象。但是带有@Bean的方法总是被执行,即使有另一个带有@Primary的方法返回相同类型的对象。
绝对@主要不会解决我的问题,可能我必须继续与配置文件的战略。
4uqofj5v2#
CoreConfigSecond被忽略
您的PB被忽略。请将CoreConfigSecond编码为第一个配置,并从PC im
CoreConfigSecond
@ImportConfig配置。