以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<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 多源配置内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯! 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |