mysql+oracle两种数据库,durid连接池
pom.xml
<dependency>
<groupId>cn.guoyukun.jdbc</groupId>
<artifactId>oracle-ojdbc6</artifactId>
<version>11.2.0.3.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.5</version>
</dependency>
application.properties配置文件
我做测试的时候用的mybatis-plus自带方法没有xml文件,如果实际情况有mybatis.xml文件,需要早properties里面配置
#mysql
spring.datasource.primary.jdbc-url=jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.primary.username=root
spring.datasource.primary.password=123456
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
#oracle
spring.datasource.secondary.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.secondary.jdbc-url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.secondary.username=user
spring.datasource.secondary.password=123456
项目结构
这里为了做区分,entity,mapper,service,impl这里为了好区分写了两套,实际上只要将mapper区分就可以
数据源配置
数据源one
package com.xxl.job.executor.source;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
/**
* @program: xxl-job
* @description: DataSourceConfig1
* @author: Jason
* @create: 2021-01-14
**/
@Configuration
//com.xxl.job.executor.mvc.mapper.primary这里是存放数据源1的mapper包路径
@MapperScan(basePackages = "com.xxl.job.executor.mvc.mapper.primary", sqlSessionFactoryRef = "oneSqlSessionFactory")
public class DataSourceOneConfig {
@Primary
@Bean(name = "oneDataSource")
//spring.datasource.primary 配置文件中对应的第一个数据源,这里进行获取进行数据源实例化
@ConfigurationProperties("spring.datasource.primary")
public DataSource oneDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "oneSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("oneDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
return sessionFactoryBean.getObject();
}
}
数据源two
package com.xxl.job.executor.source;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @program: xxl-job
* @description: DataSourceConfig2
* @author: Jason
* @create: 2021-01-14
**/
@Configuration
//com.xxl.job.executor.mvc.mapper.secondary这里是存放数据源2的mapper包路径
@MapperScan(basePackages = "com.xxl.job.executor.mvc.mapper.secondary", sqlSessionFactoryRef = "twoSqlSessionFactory")
public class DataSourceTwoConfig {
@Bean(name = "twoDataSource")
//spring.datasource.secondary 配置文件中对应的第一个数据源,这里进行获取进行数据源实例化
@ConfigurationProperties("spring.datasource.secondary")
public DataSource twoDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "twoSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("twoDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
return sessionFactoryBean.getObject();
}
}
启动类
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisPlusAutoConfiguration.class})
@SpringBootApplication
public class XxlJobExecutorApplication {
public static void main(String[] args) {
SpringApplication.run(XxlJobExecutorApplication.class, args);
}
}
测试
mapper
public interface XxlInfoPrimaryMapper extends BaseMapper<XxlInfoPrimary> {
//mapper one
}
public interface XxlInfoSecondaryMapper extends BaseMapper<XxlInfoSecondary> {
//mapper two
}
serviceImpl
@Service("XxlInfoPrimaryService")
public class XxlInfoPrimaryServiceImpl extends ServiceImpl<XxlInfoPrimaryMapper, XxlInfoPrimary> implements XxlInfoPrimaryService {
@Resource
private XxlInfoPrimaryMapper xxlInfoOneMapper;
@Resource
private XxlInfoSecondaryMapper xxlInfoTwoMapper;
@Override
public void insert() {
//mysql get
List<XxlInfoPrimary> list = xxlInfoOneMapper.selectList(new QueryWrapper<>());
list.forEach(item->{
//oracle set
XxlInfoSecondary secondary = new XxlInfoSecondary();
secondary.setName(item.getName());
secondary.setAge(item.getAge());
xxlInfoTwoMapper.insert(secondary);
});
}
}
controller
@RestController
@RequestMapping(value = "/api")
public class TestController {
@Resource
private XxlInfoPrimaryService xxlInfoPrimaryService;
@RequestMapping("/insert")
public void insert(){
xxlInfoPrimaryService.insert();
}
}