我正在编写一个与一个数据库对话,获取其他数据库的凭据并连接到其他数据库的应用程序。它使用运行时构造的DataSource和EntityManagerFactory进行此操作。
如果我想使用Spring数据存储库,我想我需要自动装配它们,因此它们必须是Spring Bean。
如果在对第一个数据库运行查询之前没有构造的DataSource,如何使用Spring Data?
答案 0 :(得分:0)
我相信有条件的Bean创建就是您的答案。检查here。
此外,在确保满足条件之后,还必须获取Bean。检查here。
@Component
public class RuntimeBeanBuilder {
@Autowired
private ApplicationContext applicationContext;
public MyObject load(String beanName, MyObject myObject) {
ConfigurableApplicationContext configContext = (ConfigurableApplicationContext) applicationContext;
SingletonBeanRegistry beanRegistry = configContext.getBeanFactory();
if (beanRegistry.containsSingleton(beanName)) {
return beanRegistry.getSingleton(beanName);
} else {
beanRegistry.registerSingleton(beanName, myObject);
return beanRegistry.getSingleton(beanName);
}
}
}
@Service
public MyService{
//inject your builder and create or load beans
@Autowired
private RuntimeBeanBuilder builder;
//do something
}
因此,为您的Spring Data Repository定义一个bean,并设置获取其他数据库凭证时要满足的条件。 然后,在您的服务中使用RuntimeBeanBuilder重新加载Bean将使您获得Bean,因为现在已经满足了它的条件。