在Spring Boot应用中连接多个数据库或数据源可以使用多种方式,下面介绍两种常用的方法:
1、使用Spring Boot官方支持的多数据源配置
Spring Boot提供了官方支持的多数据源配置,可以简单地配置和管理多个数据源。
需要在application.properties文件中分别添加多个数据源的配置,并通过@Primary注解指定默认数据源。然后,通过@Configuration注解创建一个DataSourceConfig类,将多个数据源注入到该类中,并通过@Bean注解将其注册为Spring Bean。最后,在需要访问某个数据源时,直接使用@Qualifier注解指定具体的数据源即可。
application.properties文件配置:
# Primary DataSourcespring.datasource.url=jdbc:mysql://localhost:3306/db1spring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# Secondary DataSourcespring.second-datasource.url=jdbc:mysql://localhost:3306/db2spring.second-datasource.username=rootspring.second-datasource.password=rootspring.second-datasource.driver-class-name=com.mysql.cj.jdbc.Driver
DataSourceConfig类配置:
@Configurationpublic class DataSourceConfig {@Primary@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix="spring.datasource")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondDataSource")@ConfigurationProperties(prefix="spring.second-datasource")public DataSource secondDataSource() {return DataSourceBuilder.create().build();}}
在需要访问某个数据源时,直接使用@Qualifier注解指定具体的数据源即可,例如:
@Servicepublic class UserServiceImpl implements UserService {@Autowired@Qualifier("primaryDataSource")private DataSource primaryDataSource;@Autowired@Qualifier("secondDataSource")private DataSource secondDataSource;// ...}
2、使用第三方库实现多数据源(本次使用Druid连接池)
除了使用Spring Boot官方支持的多数据源配置,也可以使用一些开源的第三方库来实现多数据源的配置。
例如,使用HikariCP、Druid等连接池,通过手动配置多个数据源并将其注入到Spring容器中,实现对多个数据源的访问。同时,也可以通过AOP等方式来实现动态切换数据源的功能,从而更加灵活地管理多个数据源。
application.properties文件配置:
# Primary DataSourcejdbc.primary.url=jdbc:mysql://localhost:3306/db1jdbc.primary.username=rootjdbc.primary.password=rootjdbc.primary.driver-class-name=com.mysql.cj.jdbc.Driver# Secondary DataSourcejdbc.second.url=jdbc:mysql://localhost:3306/db2jdbc.second.username=rootjdbc.second.password=rootjdbc.second.driver-class-name=com.mysql.cj.jdbc.Driver
DataSourceConfig类配置:
@Configurationpublic class DataSourceConfig {@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix="jdbc.primary")public DataSource primaryDataSource() {return new DruidDataSource();}@Bean(name = "secondDataSource")@ConfigurationProperties(prefix="jdbc.second")public DataSource secondDataSource() {return new DruidDataSource();}}
在需要访问某个数据源时,可以通过@Qualifier注解指定具体的数据源,例如:
@Servicepublic class UserServiceImpl implements UserService {@Autowired@Qualifier("primaryDataSource")private DataSource primaryDataSource;@Autowired@Qualifier("secondDataSource")private DataSource secondDataSource;// ...}