springboot jdbcTemplate 多源配置及特殊场景使用说明

 更新时间:2025年07月22日 10:57:42   作者:岚明  
文章讲解Spring Boot中JdbcTemplate多数据源配置,涵盖单服务器多库与多服务器多库两种模式,本文结合特殊场景使用分析给大家介绍的非常详细,感兴趣的朋友一起看看吧

以mysql 说明:

对于多数据源中大致分为两种 一个mysql服务器,多个库,另外一种就是多个mysql服务器多个库表。

对于以上通用配置如下:以mysql8说明

#第一个库
spring.datasource.master.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.master.jdbc-url=jdbc:mysql://localhost:3306/aa?&serverTimezone=Asia/Shanghai
spring.datasource.master.username=**
spring.datasource.master.password=**
spring.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
#第二个库
spring.datasource.slave.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.slave.jdbcurl=jdbc:mysql://localhost:3306/bb?&serverTimezone=Asia/Shanghai
#spring.datasource.slave.username=**
#spring.datasource.slave.password=**
#spring.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver

mysql8和mysql5版本上配置的驱动要注意  ,8对应 com.mysql.cj.jdbc.Driver   5对应com.mysql.jdbc.Driver

另外 我使用的是jdbc ,所以url就使用  jdbcurl.

以下 配置说明:

@Configuration
public class DataSourceConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.master")
    @Primary
    public DataSource masterDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.slave")
    public DataSource slaveDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean
    @Primary
    public JdbcTemplate masterJdbcTemplate(@Qualifier("masterDataSource") DataSource primaryDataSource) {
        return new JdbcTemplate(primaryDataSource);
    }
    @Bean
    public JdbcTemplate slaveJdbcTemplate(@Qualifier("slaveDataSource") DataSource secondaryDataSource) {
        return new JdbcTemplate(secondaryDataSource);
    }
}

以下使用

@Resource(name = "masterJdbcTemplate") private JdbcTemplate masterJdbcTemplate; @Resource(name = "slaveJdbcTemplate") private JdbcTemplate slaveJdbcTemplate;

这以上 特别说明,针对bean的名字一定要备注上,不然会默认指向。

有一种特殊情景下使用说明: 

在数据同步的时候,需要进行执行事务。但是又是在同一个服务器下的两个库,这个时候我们实际执行的是mysql库的事务。这个时候我们使用一种不区分库而又要执行的事务。以下进行说明:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.jdbc-url=jdbc:mysql://127.0.0.1:3306/?&serverTimezone=Asia/Shanghai
spring.datasource.username=**
spring.datasource.password=**
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

使用这种,不指定库,只指定服务器。

配置:

@Configuration
public class DataSourceConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

使用:

@Autowired
private JdbcTemplate jdbcTemplate;

备注:这种模式使用,就需要在执行sql的方式注意: 格式:   <database>.<tableName>

例如: 需要执行a数据库的b表的sql:     a.b

补充一种使用方法 一个事务涉及到的多个sql,这些sql分别对应不同的database(事务针对服务器)

@Autowired
private TransactionTemplate transactionTemplate;
transactionTemplate.execute(status -> {
                try {
                    jdbcTemplate.execute("SET GTID_NEXT='" +gtid + "'");
                    List<String> arrSql = JSON.parseArray(sqlArr, String.class);
                    for (String sql : arrSql) {
                        jdbcTemplate.execute(sql);
                    }
                    return null;
                } catch (Exception e) {
                    status.setRollbackOnly();
                    e.printStackTrace();             
                    return null;
                }
            });

到此这篇关于springboot jdbcTemplate 多源配置以及特殊场景使用的文章就介绍到这了,更多相关springboot jdbcTemplate 多源配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 实例分析Java单线程与多线程

    实例分析Java单线程与多线程

    本篇文章通过代码实例给大家详细讲述了Java单线程与多线程的相关原理和知识点总结,需要的朋友可以学习下。
    2018-02-02
  • Java基础篇之反射机制详解

    Java基础篇之反射机制详解

    本文详细讲解了Java基础篇之反射机制,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • Java基于JDBC实现事务,银行转账及货物进出库功能示例

    Java基于JDBC实现事务,银行转账及货物进出库功能示例

    这篇文章主要介绍了Java基于JDBC实现事务,银行转账及货物进出库功能,较为详细的分析了事务操作的原理、实现方法及java基于jdbc连接数据库实现银行事务操作的相关技巧,需要的朋友可以参考下
    2017-12-12
  • Spring Boot webflux使用方法解析

    Spring Boot webflux使用方法解析

    这篇文章主要介绍了Spring Boot webflux使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • swagger配置正式环境中不可访问的问题

    swagger配置正式环境中不可访问的问题

    这篇文章主要介绍了swagger配置正式环境中不可访问的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Springboot如何使用logback实现多环境配置?

    Springboot如何使用logback实现多环境配置?

    上一篇文章中老顾介绍了logback基本配置,了解了日志配置的基本方式.我们平时在系统开发时,开发环境与生产环境的日志配置会不一样;那今天老顾就跟大家介绍一下如何实现多环境配置,需要的朋友可以参考下
    2021-06-06
  • 使用java实现各种数据统计图(柱形图,饼图,折线图)

    使用java实现各种数据统计图(柱形图,饼图,折线图)

    用Jfree实现条形柱状图表,java代码实现。可经常用于报表的制作,代码自动生成后可以自由查看。可以自由配置图表的各个属性,用来达到自己的要求和目的。本文给大家介绍使用java实现各种数据统计图(柱形图,饼图,折线图),需要的朋友可以参考下
    2015-10-10
  • Java Swing实现窗体添加背景图片的2种方法详解

    Java Swing实现窗体添加背景图片的2种方法详解

    这篇文章主要介绍了Java Swing实现窗体添加背景图片的2种方法,结合实例形式较为详细的分析了Swing实现窗体添加背景图片的方法,并总结分析了Swing重绘中repaint与updateUI的区别,需要的朋友可以参考下
    2017-11-11
  • 使用gRPC微服务的内部通信优化

    使用gRPC微服务的内部通信优化

    这篇文章主要为大家介绍了微服务优化之使用gRPC做微服务的内部通信,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • springBoot接入阿里云oss的实现步骤

    springBoot接入阿里云oss的实现步骤

    这篇文章主要介绍了springBoot接入阿里云oss的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论