Spring启动如何添加可能存在或不存在的第二个数据源

时间:2017-09-04 19:58:06

标签: spring jpa spring-boot

我希望为我的应用程序提供一个可选的辅助数据库,这样如果部署环境中存在辅助数据库,则存储库可以从中检索数据,但如果它不存在,则应用程序仍然可以正常工作数据库,存储库将以应用程序可以知道此数据源不可用的方式运行。

我绝对可以想到完成此类事情的方法,但我想知道是否有更直接的配置类型实现此方法。或者,如果存在模式类型的处理方式,则更可取。

1 个答案:

答案 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