以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的方式注意: 格式: .
例如: 需要执行a数据库的b表的sql: a.b
补充一种使用方法 一个事务涉及到的多个sql,这些sql分别对应不同的database(事务针对服务器)
@Autowired
private TransactionTemplate transactionTemplate;
transactionTemplate.execute(status -> {
try {
jdbcTemplate.execute("SET GTID_NEXT='" +gtid + "'");
List 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 多源配置内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!
