java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot jdbcTemplate 多源配置

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

作者:岚明

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

您可能感兴趣的文章:
阅读全文