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

啓動,測試,成功測試

相關文章
相關標籤/搜索