springboot-配置多个数据源详解编程语言

1、创建一个datasource包,新建DataSource1,DataSource2两个文件,通过注解来配置数据源

springboot-配置多个数据源详解编程语言

DataSource1:

package com.springboot.datasource; 
 
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.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.jdbc.datasource.DataSourceTransactionManager; 
 
import javax.sql.DataSource; 
 
@Configuration//注解到spring容器中 
@MapperScan(basePackages = "com.springboot.data1.mapper",sqlSessionFactoryRef = "data1SqlSessionFactory") 
public class DataSource1 { 
 
    /** 
     * 返回data1数据库的数据源 
     * @return 
     */ 
    @Bean(name="data1Source") 
    @Primary//主数据源 
    @ConfigurationProperties(prefix = "spring.datasource.data1") 
    public DataSource dataSource(){ 
        return DataSourceBuilder.create().build(); 
    } 
 
    /** 
     * 返回data1数据库的会话工厂 
     * @param ds 
     * @return 
     * @throws Exception 
     */ 
    @Bean(name = "data1SqlSessionFactory") 
    @Primary 
    public SqlSessionFactory sqlSessionFactory(@Qualifier("data1Source") DataSource ds) throws Exception{ 
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); 
        bean.setDataSource(ds); 
        return bean.getObject(); 
    } 
 
    /** 
     * 返回data1数据库的会话模板 
     * @param sessionFactory 
     * @return 
     * @throws Exception 
     */ 
    @Bean(name = "data1SqlSessionTemplate") 
    @Primary 
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("data1SqlSessionFactory") SqlSessionFactory sessionFactory) throws  Exception{ 
        return  new SqlSessionTemplate(sessionFactory); 
    } 
 
    /** 
     * 返回data1数据库的事务 
     * @param ds 
     * @return 
     */ 
    @Bean(name = "data1TransactionManager") 
    @Primary 
    public DataSourceTransactionManager transactionManager(@Qualifier("data1Source") DataSource ds){ 
        return new DataSourceTransactionManager(ds); 
    } 
}

View Code

DataSource2:

package com.springboot.datasource; 
 
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.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.jdbc.datasource.DataSourceTransactionManager; 
 
import javax.sql.DataSource; 
 
@Configuration//注解到spring容器中 
@MapperScan(basePackages = "com.springboot.data2.mapper",sqlSessionFactoryRef = "data2SqlSessionFactory") 
public class DataSource2 { 
 
    /** 
     * 返回data2数据库的数据源 
     * @return 
     */ 
    @Bean(name="data2Source") 
    @ConfigurationProperties(prefix = "spring.datasource.data2") 
    public DataSource dataSource(){ 
        return DataSourceBuilder.create().build(); 
    } 
 
    /** 
     * 返回data2数据库的会话工厂 
     * @param ds 
     * @return 
     * @throws Exception 
     */ 
    @Bean(name = "data2SqlSessionFactory") 
    public SqlSessionFactory sqlSessionFactory(@Qualifier("data2Source") DataSource ds) throws Exception{ 
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); 
        bean.setDataSource(ds); 
        return bean.getObject(); 
    } 
 
    /** 
     * 返回data2数据库的会话模板 
     * @param sessionFactory 
     * @return 
     * @throws Exception 
     */ 
    @Bean(name = "data2SqlSessionTemplate") 
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("data2SqlSessionFactory") SqlSessionFactory sessionFactory) throws  Exception{ 
        return  new SqlSessionTemplate(sessionFactory); 
    } 
 
    /** 
     * 返回data2数据库的事务 
     * @param ds 
     * @return 
     */ 
    @Bean(name = "data2TransactionManager") 
    public DataSourceTransactionManager transactionManager(@Qualifier("data2Source") DataSource ds){ 
        return new DataSourceTransactionManager(ds); 
    } 
}

View Code

2、在application.properties文件配置两个数据源

spring.datasource.data1.url=jdbc:mysql://127.0.0.1:3306/mysql-boot 
spring.datasource.data1.username=root 
spring.datasource.data1.password=123123 
spring.datasource.data1.driver-class-name=com.mysql.jdbc.Driver 
 
spring.datasource.data2.url=jdbc:mysql://127.0.0.1:3306/mysql-confswh 
spring.datasource.data2.username=root 
spring.datasource.data2.password=123123 
spring.datasource.data2.driver-class-name=com.mysql.jdbc.Driver

3、两个测试的Service&Mapper

springboot-配置多个数据源详解编程语言

4、Controller调用

@RequestMapping("getTopicList") 
    public List<Map<String,Object>> getTopicList(){ 
        List<Map<String,Object>> list1 = userServiceData1.getTopicListData1(); 
        List<Map<String,Object>> list2 = userServiceData2.getTopicListData2(); 
        return list1; 
    }

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18439.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论