SpringBoot配置连接两个或多个数据库的实现

作者:不掉头发的阿水 时间:2024-01-14 14:40:36 

在Spring Boot应用中连接多个数据库或数据源可以使用多种方式,下面介绍两种常用的方法:

1、使用Spring Boot官方支持的多数据源配置

Spring Boot提供了官方支持的多数据源配置,可以简单地配置和管理多个数据源。

需要在application.properties文件中分别添加多个数据源的配置,并通过@Primary注解指定默认数据源。然后,通过@Configuration注解创建一个DataSourceConfig类,将多个数据源注入到该类中,并通过@Bean注解将其注册为Spring Bean。最后,在需要访问某个数据源时,直接使用@Qualifier注解指定具体的数据源即可。

application.properties文件配置:

# 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

DataSourceConfig类配置:

@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();
   }
}

在需要访问某个数据源时,直接使用@Qualifier注解指定具体的数据源即可,例如:

@Service
public 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 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

DataSourceConfig类配置:

@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();
   }
}

在需要访问某个数据源时,可以通过@Qualifier注解指定具体的数据源,例如:

@Service
public class UserServiceImpl implements UserService {
   @Autowired
   @Qualifier("primaryDataSource")
   private DataSource primaryDataSource;
   @Autowired
   @Qualifier("secondDataSource")
   private DataSource secondDataSource;
   // ...
}

需要注意的是,在使用多个数据源时,需要确保每个数据源的配置信息正确,避免出现连接错误或者数据冲突等问题。同时,也需要考虑事务管理、数据同步等问题,以保证多个数据源之间的数据一致性。

来源:https://blog.csdn.net/lps12345666/article/details/130530125

标签:SpringBoot,连接,数据库
0
投稿

猜你喜欢

  • 详解Python安装scrapy的正确姿势

    2023-04-04 01:38:14
  • Python django框架输入汉字,数字,字符生成二维码实现详解

    2022-12-13 00:23:24
  • 比较不错的函数式JavaScript编程指南教程

    2023-08-25 08:24:41
  • 网页开发中的容易忽略的问题 javascript HTML中的table

    2023-09-04 20:43:52
  • python批量查询、汉字去重处理CSV文件

    2023-01-20 08:27:17
  • Django-migrate报错问题解决方案

    2021-11-05 13:30:16
  • Python时间转化方法超全总结

    2021-10-23 02:39:56
  • Django使用Profile扩展User模块方式

    2023-06-16 12:26:12
  • Oracle 常用的SQL语句

    2009-08-02 07:09:00
  • vue使用代理解决请求跨域问题详解

    2024-05-10 14:15:33
  • Vue3源码分析组件挂载初始化props与slots

    2023-07-02 16:45:37
  • 小议JavaScript泛式框架架构的逻辑形式

    2010-07-02 12:55:00
  • SQL Server的触发器详解

    2024-01-21 02:45:41
  • python提取内容关键词的方法

    2021-07-29 00:45:37
  • Python操作MySQL模拟银行转账

    2022-05-19 21:23:11
  • javascript中实现override,overload和类似c#中的property

    2008-05-16 12:01:00
  • 深入解析mysql.sock不见的问题

    2024-01-26 21:30:28
  • 如何将 Access 的 Memo 型态字段汇入到 SQL2005 的 nvarchar 型态字段

    2008-12-26 18:13:00
  • ThinkPHP5集成JS-SDK实现微信自定义分享功能

    2023-06-10 13:59:47
  • gethostbyaddr在Python3中引发UnicodeDecodeError

    2023-06-15 09:34:33
  • asp之家 网络编程 m.aspxhome.com