1. 程式人生 > >spring boot druid mybatis 多資料來源配置

spring boot druid mybatis 多資料來源配置

1.application.properties

spring.datasource.url = jdbc\:mysql\://192.168.1.1\:3306/business?autoRconnect\=true&useUnicode\=true&characterEncoding\=UTF8&zeroDateTimeBehavior\=convertToNull&allowMultiQueries=true
spring.datasource.username = root
spring.datasource.password = R4ydEq6+eNhAXKnjqn0nGTNTldnaoxuuwkWau+IO1I3FGXvXbH+gRzPlUGnjmgNNwic8PkfqkkKn1IeJ/laspg==

spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.maxActive = 20
spring.datasource.initialSize = 5
spring.datasource.minIdle = 5
spring.datasource.maxWait = 60000
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.minEvictableIdleTimeMillis = 300000
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.validationQuery = SELECT 'x'
spring.datasource.testWhileIdle = true
spring.datasource.testOnBorrow = false
spring.datasource.testOnReturn = false
spring.datasource.poolPreparedStatements = true
spring.datasource.filters = config,stat
spring.datasource.connectionProperties = config.decrypt=true


########################################################
###STOCK-DB
spring.stock.datasource.url = jdbc\:mysql\://192.168.1.1\:3306/stock?autoRconnect\=true&useUnicode\=true&characterEncoding\=UTF8&zeroDateTimeBehavior\=convertToNull&allowMultiQueries=true
spring.stock.datasource.username = root
spring.stock.datasource.password = R4ydEq6+eNhAXKnjqn0nGTNTlffaoxiPwkWau+IO1I3FGXvXjjjgRzPlUGnjmgNNwic8PkfqBbKn1IeJ/laspg==
spring.stock.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.stock.datasource.maxActive = 30
spring.stock.datasource.initialSize = 10
spring.stock.datasource.minIdle = 10
spring.stock.datasource.maxWait = 800
spring.stock.datasource.timeBetweenEvictionRunsMillis = 60000
spring.stock.datasource.minEvictableIdleTimeMillis = 300000
spring.stock.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.stock.datasource.validationQuery = SELECT 'x'
spring.stock.datasource.testWhileIdle = true
spring.stock.datasource.testOnBorrow = true
spring.stock.datasource.testOnReturn = false
spring.stock.datasource.poolPreparedStatements = true
spring.stock.datasource.filters = config,stat
spring.stock.datasource.queryTimeout=2500
spring.stock.datasource.connectionProperties = config.decrypt=true

mybatis.config-location = classpath:mybatis/mybatisConfig.xml

2.DruidDBConfig.java


import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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 javax.sql.DataSource;

@Configuration
public class DruidDBConfig {
    private Logger logger=LoggerFactory.getLogger(DruidDBConfig.class);

    @Bean(name="dataSource")
    @ConfigurationProperties(prefix="spring.datasource")
    @Primary
    public DataSource dataSource() {
        return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
    }

    @Bean(name="sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/bussiness/*.xml"));
        return bean.getObject();
    }

    @Bean(name="stockDataSource")
    @ConfigurationProperties(prefix="spring.stock.datasource")
    public DataSource stockDataSource() {
        return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
    }


    @Bean(name="stockSqlSessionFactory")
    public SqlSessionFactory stockSqlSessionFactory(@Qualifier("stockDataSource") DataSource stockDataSource) throws Exception {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(stockDataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/stock/*.xml"));
        return bean.getObject();
    }

3.MyBatisConfig.java


import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
 * MyBatis基礎配置
 *
 */
@Configuration
@AutoConfigureAfter(DruidDBConfig.class)
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer {

    @Resource
    DataSource dataSource;

    @Resource
    DataSource stockDataSource;


    @Bean
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public PlatformTransactionManager annotation2DrivenTransactionManager() {
        return new DataSourceTransactionManager(stockDataSource);
    }
}

4.MyBatisMapperScannerConfig.java


import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisMapperScannerConfig {

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.shunwang.shop.back.dao.bussiness");
        return mapperScannerConfigurer;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerStockConfigurer() {
        MapperScannerConfigurer mapperStockScannerConfigurer=new MapperScannerConfigurer();
        mapperStockScannerConfigurer.setSqlSessionFactoryBeanName("stockSqlSessionFactory");
        mapperStockScannerConfigurer.setBasePackage("com.shunwang.shop.back.dao.stock");
        return mapperStockScannerConfigurer;
    }

}