mysql 和 spring boot 多数据源配置

数据源一:

package com.example.zhujie.configure;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.logging.Log4jImpl;
import org.apache.ibatis.logging.slf4j.Slf4jImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.example.zhujie.dao",sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlProperties {

    private String mybatisLocation = "classpath:/mapper/**/*.xml";

    @Bean("druidDataSource")
    public DataSource getDataSource() {
        // 创建 dataSource 接口的实现类
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl("jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false");
        datasource.setPassword("111222");
        datasource.setUsername("root");
        return datasource;
    }

    @Bean("mysqlSqlSessionFactory")
    public SqlSessionFactory getSqlSessionFactory(@Qualifier("druidDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        // 配置mybatis 的mapper 文件
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(mybatisLocation));
        // mybatis 在mapper文件中实体字段映射自动按驼峰命名规则对应实体字段
        sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        // mybatis映射map的时候,字段值为null情况也返回
        sqlSessionFactoryBean.getObject().getConfiguration().setCallSettersOnNulls(true);
        return sqlSessionFactoryBean.getObject();
    }

    @Bean("sqlSessionTemplate")
    public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean
    public PlatformTransactionManager txManager(@Qualifier("druidDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

}

数据源二:

package com.example.zhujie.configure;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.example.zhujie.daotwo",sqlSessionFactoryRef = "mysqlSqlSessionFactorytwo")
public class MysqlPropertiesTwo {

    private String mybatisLocation = "classpath:/mappertwo/**/*.xml";

    @Bean("druidDataSourcetwo")
    public DataSource getDataSource() {
        // 创建 dataSource 接口的实现类
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl("jdbc:mysql://127.0.0.1:3306/nacos?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false");
        datasource.setPassword("111222");
        datasource.setUsername("root");
        return datasource;
    }

    @Bean("mysqlSqlSessionFactorytwo")
    public SqlSessionFactory getSqlSessionFactory(@Qualifier("druidDataSourcetwo") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        // 配置mybatis 的mapper 文件
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(mybatisLocation));
        // mybatis 在mapper文件中实体字段映射自动按驼峰命名规则对应实体字段
        sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        // mybatis映射map的时候,字段值为null情况也返回
        sqlSessionFactoryBean.getObject().getConfiguration().setCallSettersOnNulls(true);
        return sqlSessionFactoryBean.getObject();
    }

    @Bean("sqlSessionTemplatetwo")
    public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactorytwo") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean("txManagertwo")
    public PlatformTransactionManager txManager(@Qualifier("druidDataSourcetwo") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

}

切记在使用事物的时候一定要指定具体的某一个bean,比如如下service层,某一个方法上加上transactionManager 指定用的是哪一个数据源,如下的userAdminDao只能是数据源druidDataSource里面的,因为它使用的是txManager
 

@Transactional(rollbackFor = Exception.class,transactionManager ="txManager")
    public void insertUserAdmin(UserAdmin userAdmin) throws TestTxException {
        userAdminDao.insertUserAdmin(userAdmin);
        try {
            UtilsTest.testTx();
        } catch (TestTxException e) {
            System.out.println(e.getMsg());
            throw new TestTxException("405","测试异常");
        }
        userAdmin.setId(userAdmin.getId() + 2);
        userAdminDao.insertUserAdmin(userAdmin);
    }

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值