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 多源配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一篇文章搞定Struts2的类型转换

    一篇文章搞定Struts2的类型转换

    这篇文章主要介绍了关于Struts2类型转换的相关资料,文中主要介绍了Struts2的类型转换器和自定义类型转换器的实现,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • Javaweb获取表单数据的多种方式

    Javaweb获取表单数据的多种方式

    这篇文章主要为大家详细介绍了Javaweb获取表单数据的多种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • SpringSecurity整合Jwt过程图解

    SpringSecurity整合Jwt过程图解

    这篇文章主要介绍了SpringSecurity整合Jwt过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 详解Java同步—线程锁和条件对象

    详解Java同步—线程锁和条件对象

    在这篇文章中给大家详细讲述了Java同步—线程锁和条件对象的相关知识点,有需要的读者们可以参考下。
    2018-07-07
  • Java编程异常处理最佳实践【推荐】

    Java编程异常处理最佳实践【推荐】

    这篇文章主要介绍了Java编程异常处理最佳实践【推荐】,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Maven继承与聚合详解及作用介绍

    Maven继承与聚合详解及作用介绍

    继承关系中,分为父模块与子模块,父模块也被称为 parent 模块,子模块会继承父模块的依赖,父模块中也可以设置依赖管理器,供子模块选择是否需要某些依赖
    2022-08-08
  • Java Spring的核心与设计思想你知道吗

    Java Spring的核心与设计思想你知道吗

    这篇文章主要为大家详细介绍了Java Spring的核心与设计思想,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Java实现鼠标拖放功能的方法

    Java实现鼠标拖放功能的方法

    这篇文章主要介绍了Java实现鼠标拖放功能的方法,很实用的功能,需要的朋友可以参考下
    2014-07-07
  • java实现装饰器模式(Decorator Pattern)

    java实现装饰器模式(Decorator Pattern)

    这篇文章主要为大家详细介绍了java实现装饰器模式Decorator Pattern,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • SpringBoot-application.yml多环境配置详解

    SpringBoot-application.yml多环境配置详解

    本文主要介绍了SpringBoot-application.yml多环境配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论