springboot-mybatis整合多数据源的简单实现

114 篇文章 2 订阅
113 篇文章 1 订阅

业务场景 从sqlserver(oa)数据库读取数据写入orcale(knowledge)

application.properties 配置文件如下:

  • #oa数据连接配置(sqlserver)

spring.datasource.oa.url=jdbc:sqlserver://172.16.8.96:1433;databaseName=ecologysso

spring.datasource.oa.username=66666

spring.datasource.oa.password=11111

spring.datasource.oa.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.oa.initialSize=5

spring.datasource.oa.maxActive=20

spring.datasource.oa.minIdle=5

spring.datasource.oa.maxWait=60000

spring.datasource.oa.poolPreparedStatements=true

spring.datasource.oa.maxOpenPreparedStatements=20

spring.datasource.oa.validationQuery=select 1

spring.datasource.oa.testOnBorrow=false

spring.datasource.oa.testOnReturn=false

spring.datasource.oa.testWhileIdle=true

spring.datasource.oa.timeBetweenEvictionRunsMillis=600000

  • #知识库数据库连接配置(orcale)

spring.datasource.knowledge.url=jdbc:oracle:thin:@172.16.8.161:1521:kms

spring.datasource.knowledge.username=765432

spring.datasource.knowledge.password=5432

spring.datasource.knowledge.driver-class-name=oracle.jdbc.driver.OracleDriver

spring.datasource.knowledge.initialSize=5

spring.datasource.knowledge.maxActive=20

spring.datasource.knowledge.minIdle=5

spring.datasource.knowledge.maxWait=60000

spring.datasource.knowledge.poolPreparedStatements=true

spring.datasource.knowledge.maxOpenPreparedStatements=20

spring.datasource.knowledge.validationQuery=select 1 from dual

spring.datasource.knowledge.testOnBorrow=false

spring.datasource.knowledge.testOnReturn=false

spring.datasource.knowledge.testWhileIdle=true

spring.datasource.knowledge.timeBetweenEvictionRunsMillis=600000


加载knowledge数据源配置如下:

package com.zldc.oaToKnowledgePlugin.config;

import javax.sql.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.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 com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;

/**

*

* @author pzx

* 2019年5月28日

*/

@Configuration

@MapperScan(basePackages = "com.zldc.oaToKnowledgePlugin.knowledge.mapper", sqlSessionTemplateRef = "knowledgeSqlSessionTemplate")

public class DataSourceKnowledgeConfig {

@Primary// 表示这个数据源是默认数据源

@Bean(name = "knowledgeDataSource")

@ConfigurationProperties(prefix = "spring.datasource.knowledge")// prefix表示读取配置文件application.properties的前缀

public DataSource knowledgeDataSource() {

return DruidDataSourceBuilder.create().build();

}

@Primary// 表示这个数据源是默认数据源

@Bean(name = "knowledgeSqlSessionFactory")

public SqlSessionFactory knowledgeSqlSessionFactory(@Qualifier("knowledgeDataSource") DataSource dataSource) throws Exception {

SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

org.apache.ibatis.session.Configuration configuration=new org.apache.ibatis.session.Configuration();

configuration.setCallSettersOnNulls(true);

bean.setConfiguration(configuration);

bean.setDataSource(dataSource);

return bean.getObject();

}

@Primary// 表示这个数据源是默认数据源

@Bean(name = "knowledgeTransactionManager")

public DataSourceTransactionManager knowledgeTransactionManager(@Qualifier("knowledgeDataSource") DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Primary// 表示这个数据源是默认数据源

@Bean(name = "knowledgeSqlSessionTemplate")

public SqlSessionTemplate knowledgeSqlSessionTemplate(@Qualifier("knowledgeSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

加载oa数据源配置文件:

package com.zldc.oaToKnowledgePlugin.config;

import javax.sql.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.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;

/**

*

* @author pzx

* 2019年5月28日

*/

@Configuration

@MapperScan(basePackages = "com.zldc.oaToKnowledgePlugin.oa.mapper", sqlSessionTemplateRef = "oaSqlSessionTemplate")

public class DataSourceOaConfig {

@Bean(name = "oaDataSource")

@ConfigurationProperties(prefix = "spring.datasource.oa")

public DataSource oaDataSource() {

return DruidDataSourceBuilder.create().build();

}

@Bean(name = "oaSqlSessionFactory")

public SqlSessionFactory oaSqlSessionFactory(@Qualifier("oaDataSource") DataSource dataSource) throws Exception {

SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

org.apache.ibatis.session.Configuration configuration=new org.apache.ibatis.session.Configuration();

configuration.setCallSettersOnNulls(true);

bean.setConfiguration(configuration);

bean.setDataSource(dataSource);

return bean.getObject();

}

@Bean(name = "oaTransactionManager")

public DataSourceTransactionManager oaTransactionManager(@Qualifier("oaDataSource") DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Bean(name = "oaSqlSessionTemplate")

public SqlSessionTemplate oaSqlSessionTemplate(@Qualifier("oaSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

特别注意:Primary这个注解必须要加上 ,意思是默认数据源配置,不加的话 spring不知道读取哪个数据源作为默认数据源。

工程的结构图如下,框中地方是核心部分

springboot-mybatis整合多数据源的简单实现

最后分享一个我自己的后端技术群,群里自己收集了很多Java架构资料,大家可以进群领取群号:680075317,也可以进群一起交流,比如遇到技术瓶颈、面试不过的,大家一些交流学习!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值