springboot配置多数据源

第一次写博客,有写的不好的地方尽情见谅,不废话了,直接上配置步骤
1、配置yml数据源配置文件,代码如下:

spring:
  datasource:
    gac:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://rm-bp19n40dq378vht2ijo.mysql.rds.aliyuncs.com:3306/gac?useUnicode=true&characterEncoding=UTF-8
      username: xxx
      password: xxx
    srmyzfactory:
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=AccessData
      username: xxx
      password: xxx

2、配置项目入口启动类

package com.gac;

import com.InitConfiguration;
import com.InitServiceConfiguration;
import com.SrmYzFactoryMybatisDbConfig;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.servlet.MultipartConfigElement;

@Configuration
@EnableTransactionManagement
@SpringBootApplication
		(exclude={
		DataSourceAutoConfiguration.class,
		//        HibernateJpaAutoConfiguration.class, //(如果使用Hibernate时,需要加)  
		DataSourceTransactionManagerAutoConfiguration.class,
		})
@Import({InitServiceConfiguration.class,InitConfiguration.class,SrmYzFactoryMybatisDbConfig.class})
@ComponentScan("com.gac")
public class adminApiApplication {

	public static void main(String[] args) {
		SpringApplication.run(adminApiApplication.class, args);
	}

	/**
	 * 文件上传配置
	 * @return
	 */
	@Bean
	public MultipartConfigElement multipartConfigElement() {
		MultipartConfigFactory factory = new MultipartConfigFactory();
		//文件最大
		factory.setMaxFileSize("10240MB"); //KB,MB
		/// 设置总上传数据总大小
		factory.setMaxRequestSize("10240MB");
		return factory.createMultipartConfig();
	}
}

说明:InitConfiguration类为主数据源的配置类,SrmYzFactoryMybatisDbConfig类为从数据源的配置类,InitServiceConfiguration可以不理会,相关的配置类如下:

package com;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
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 org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
/**
 * Created by yanhao on 2017/11/23.
 */
@Configuration
@MapperScan(basePackages ="com.gac.mapper" , sqlSessionTemplateRef  = "sqlSession")
public class InitConfiguration {

    private static final Logger logger = Logger.getLogger(InitConfiguration.class);

    public InitConfiguration() {
        logger.info("Load and init mysql server....");
    }


    @Bean(name = "dataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.gac")
    public DataSource dataSource() {
        PoolProperties p = new PoolProperties();
        p.setJmxEnabled(true);
        p.setTestWhileIdle(true);
        p.setTestOnBorrow(true);
        p.setValidationQuery("SELECT 1");
        p.setTestOnReturn(false);
        p.setValidationInterval(30000);
        p.setTimeBetweenEvictionRunsMillis(30000);
        p.setMaxActive(200);
        p.setInitialSize(20);
        p.setMaxWait(10000);
        p.setRemoveAbandonedTimeout(180);
        p.setMinEvictableIdleTimeMillis(30000);
        p.setMinIdle(10);
        p.setLogAbandoned(true);
        p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" +
                "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
        DataSource dataSource = new DataSource();
        dataSource.setPoolProperties(p);
        return dataSource;
    }

    @Bean(name = "sqlSessionFactoryBean")
    @Primary
    public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper/**/*.xml"));
        logger.info("<========== Mysql DataSource ==========>: " + dataSource.getUrl());
        return sqlSessionFactoryBean.getObject();
    }

    @Bean(name = "sqlSession")
    @Primary
    public SqlSession sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        SqlSession sqlSession = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSession;
    }

    @Bean(name = "transactionManager")
    @Primary
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

}

代码说明

springboot配置多数据源
springboot配置多数据源

从数据源配置类
package com;

import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
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.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 org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = “com.gac.srmyzfactory”, sqlSessionFactoryRef = “srmYzFactorySqlSessionFactory”)
public class SrmYzFactoryMybatisDbConfig {

private static final Logger logger = Logger.getLogger(SrmYzFactoryMybatisDbConfig.class);

@Bean(name = "srmYzFactoryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.srmyzfactory")
public DataSource dataSource() {
    return DataSourceBuilder.create().build();
}

@Bean(name = "srmYzFactoryTransactionManager")
public DataSourceTransactionManager srmYzFactoryTransactionManager(@Qualifier("srmYzFactoryDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);

}

@Bean(name = "srmYzFactorySqlSessionFactory")
public SqlSessionFactory srmYzFactorySqlSessionFactory(@Qualifier("srmYzFactoryDataSource") DataSource basicDataSource) throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(basicDataSource);
    factoryBean.setMapperLocations(
            new PathMatchingResourcePatternResolver().getResources("classpath:srmyzfactory/**/*.xml"));
    logger.info("<========== MySqlServer DataSource ==========>: " + "111111111111111111111111111111111111111111111111111");
    return factoryBean.getObject();
}

@Bean(name = "srmYzFactorySqlSessionTemplate")
public SqlSessionTemplate srmYzFactorySqlSessionTemplate(
        @Qualifier("srmYzFactorySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory);
}

}

好了,配置完成了!!