springboot配置多数据源以及事务管理

1、在properties文件中配置多个数据库连接信息,不可使用springboot提供的属性名要自定义,但是后缀不可改变,加载的时候根据他的前缀进行加载。

spring.test01.jdbc-url=jdbc:mysql://localhost:3306/test
spring.test01.username=root
spring.test01.password=123456
spring.test01.driver-class-name=com.mysql.jdbc.Driver

spring.test02.jdbc-url=jdbc:mysql://localhost:3306/test01
spring.test02.username=root
spring.test02.password=123456
spring.test02.driver-class-name=com.mysql.jdbc.Driver

2、加载链接信息进行创建数据源——根据数据源创建sqlsessionfactory——通过数据源配置事务管理——通过sqlsessionfactory创建SqlSessionTemplate——通过@MapperScan注解进行扫包,指定哪个包使用哪个数据源

数据源一:

@Configuration // 注册到springboot容器中
//进行扫包,指定那个包使用该数据源
@MapperScan(basePackages = "com.hzy.mapper.mapper01", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class Test01DataSource{
    /*
     * 加载application.properties文件中,以spring.test01开头的值
     * 更具加载的值进行创建数据源
     */

    @Bean(name = "test1DataSource")
    @ConfigurationProperties(prefix = "spring.test01")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }
    /*
     * 根据创建好的数据源进行创建sqlsessionfactory
     * 如果有映射文件可以加载映射文件
     */

    @Bean(name = "test1SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // bean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));
        return bean.getObject();
    }
    /*
     * 配置该数据源的事务管理
     */

    @Bean(name = "test1TransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    /*
     * 配置SqlSessionTemplate
     */

    @Bean(name = "test1SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

数据源二:

@Configuration // 将标注的类注册到springboot容器中
//进行扫包,指定那个包使用该数据源
@MapperScan(basePackages = "com.hzy.mapper.mapper02", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class Test02DataSource{
    /*
     * 加载application.properties文件中,以spring.test02开头的值
     * 更具加载的值进行创建数据源
     */

    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix = "spring.test02")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }
    /*
     * 根据创建好的数据源进行创建sqlsessionfactory
     * 如果有映射文件可以加载映射文件
     */

    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test2/*.xml"));
        return bean.getObject();
    }
    /*
     * 配置该数据源的事务管理
     */

    @Bean(name = "test2TransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    /*
     * 配置SqlSessionTemplate
     */

    @Bean(name = "test2SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

3、事务管理使用@Transactional注解的transactionManager属性进行配置事务管理器。

//指定哪个数据源的事务
    @Transactional(transactionManager="test1TransactionManager")
    public void insert(String name,Integer age) {
        boolean flang = usermapper01.insert(name, age);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值