我希望为我的应用程序提供一个可选的辅助数据库,这样如果部署环境中存在辅助数据库,则存储库可以从中检索数据,但如果它不存在,则应用程序仍然可以正常工作数据库,存储库将以应用程序可以知道此数据源不可用的方式运行。
我绝对可以想到完成此类事情的方法,但我想知道是否有更直接的配置类型实现此方法。或者,如果存在模式类型的处理方式,则更可取。
答案 0 :(得分:1)
通过实现2个数据库配置并使用@Primary注释注释其中一个数据库配置,您当然可以以干净的方式使用多个数据库。
@Bean(name = "mainDataSource")
@Primary
public DataSource mainDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
对于辅助数据库,您可以创建几乎相同的内容,但不要在其上放置@Primary注释。
@Bean(name = "secondaryDataSource")
public DataSource secondaryDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
请注意,您不需要将@Primary注释仅放在DataSource bean上,而是放在用于连接数据库的任何bean中。
完成此操作后,您所要做的就是注释您的EntityManager或通常与@Qualifier一起使用的任何其他连接管理器。
@Autowired
@Qualifier("mainEntityManager")
private EntityManager mainDatabase;
@Autowired
@Qualifier("secondEntityManager")
private EntityManager secondDatabase;
在我的情况下,我更喜欢在后台创建一个类来管理它。 您可以在my article on linkedin.上找到相关的完整示例,并查看example code on GitHub