在Spring Boot应用中连接多个数据库或数据源可以使用多种方式,下面介绍两种常用的方法:
需要在application.properties文件中分别添加多个数据源的配置,并通过@Primary注解指定默认数据源。然后,通过@Configuration注解创建一个DataSourceConfig类,将多个数据源注入到该类中,并通过@Bean注解将其注册为Spring Bean。最后,在需要访问某个数据源时,直接使用@Qualifier注解指定具体的数据源即可。
- # Primary DataSource
- spring.datasource.url=jdbc:mysql://localhost:3306/db1
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-
- # Secondary DataSource
- spring.second-datasource.url=jdbc:mysql://localhost:3306/db2
- spring.second-datasource.username=root
- spring.second-datasource.password=root
- spring.second-datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- @Configuration
- public 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();
- }
- }
- @Service
- public class UserServiceImpl implements UserService {
- @Autowired
- @Qualifier("primaryDataSource")
- private DataSource primaryDataSource;
-
- @Autowired
- @Qualifier("secondDataSource")
- private DataSource secondDataSource;
-
- // ...
- }
例如,使用HikariCP、Druid等连接池,通过手动配置多个数据源并将其注入到Spring容器中,实现对多个数据源的访问。同时,也可以通过AOP等方式来实现动态切换数据源的功能,从而更加灵活地管理多个数据源。
- # Primary DataSource
- jdbc.primary.url=jdbc:mysql://localhost:3306/db1
- jdbc.primary.username=root
- jdbc.primary.password=root
- jdbc.primary.driver-class-name=com.mysql.cj.jdbc.Driver
-
- # Secondary DataSource
- jdbc.second.url=jdbc:mysql://localhost:3306/db2
- jdbc.second.username=root
- jdbc.second.password=root
- jdbc.second.driver-class-name=com.mysql.cj.jdbc.Driver
- @Configuration
- public 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();
- }
- }
- @Service
- public class UserServiceImpl implements UserService {
- @Autowired
- @Qualifier("primaryDataSource")
- private DataSource primaryDataSource;
-
- @Autowired
- @Qualifier("secondDataSource")
- private DataSource secondDataSource;
-
- // ...
- }