Springboot 配置多数据源 (参考纯洁微笑) 记录碰见的问题

1.修改application.properties数据源配置java

##########多数据源###########
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.test2.jdbc-url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.test2.username=root
spring.datasource.test2.password=root
spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver

2.设置项目启动,加载多数据源配置mysql

    多数据源有2中。spring

            一:经过不一样的注解使用多数据源sql

            二:设置不一样的路径,使用不一样数据源(使用的第二种)apache

package com.example.demo.config;

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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.example.demo.mapper.test1")
public class Data1SourceConfig {

    @Bean(name = "test1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    @Primary
    //建立一个DataSource
    public DataSource testDataSource(){
        return DataSourceBuilder.create().build();
    }

    /**
     * Qualifier 根据名称注入DataSource对象
     * @param dataSource
     * @return
     * @throws Exception
     */
    @Bean(name = "test1SqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception{
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/test1/*.xml"));
        //开启驼峰转化
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
        sqlSessionFactoryBean.setConfiguration(configuration);
        return sqlSessionFactoryBean.getObject();
    }

    @Bean("test1DataSourceTransactionManager")
    @Primary
    public DataSourceTransactionManager TestDataSourceTransactionManager(@Qualifier("test1DataSource") DataSource dataSource ){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
        return dataSourceTransactionManager;
    }

    @Bean("test1TestSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate TestSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }





}

首先建立 DataSource,而后建立 SqlSessionFactory 再建立事务,最后包装到 SqlSessionTemplate 中。其中须要指定分库的 mapper 文件地址,以及分库dao层代码session

@MapperScan(basePackages = "com.example.demo.mapper.test1", sqlSessionTemplateRef  = "test1SqlSessionTemplate")

这块的注解就是指明了扫描 dao 层,而且给 dao 层注入指定的 SqlSessionTemplate。全部@Bean都须要按照命名指定正确。mybatis

这里须要注意的就是,多数据源,须要在各自的数据源里面,从新配置驼峰,已经处理,参考上面代码app

启动,测试,成功测试

相关文章
相关标签/搜索