业务场景 从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不知道读取哪个数据源作为默认数据源。
工程的结构图如下,框中地方是核心部分
最后分享一个我自己的后端技术群,群里自己收集了很多Java架构资料,大家可以进群领取群号:680075317,也可以进群一起交流,比如遇到技术瓶颈、面试不过的,大家一些交流学习!