<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
#主数据源
spring.datasource.primary.driverClassName=com.mysql.jdbc.Driver
spring.datasource.primary.url=jdbc:mysql://1ojsnl87fj3-olwl1znqzk3x.cn-hangzhou.datalakeanalytics.aliyuncs.com:10000/abc?useUnicode=true&characterEncoding=UTF-8
spring.datasource.primary.username=oa_1ojsnl87fj3
spring.datasource.primary.password=123456abcD
spring.datasource.primary.mapperLocations=classpath:mapper/primary/*.xml
#数据源2
spring.datasource.db2.driverClassName=com.mysql.jdbc.Driver
spring.datasource.db2.url=jdbc:mysql://localhost:3307/syhd_edu_video?useUnicode=true&characterEncoding=UTF-8
spring.datasource.db2.username=root
spring.datasource.db2.password=1
spring.datasource.db2.mapperLocations=classpath:mapper/db2/*.xml
package jykt.dla.com.cn.jyktdla.core.ds;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author jxd
* @version 1.0 *
* @date 2021/6/17 15:10
*/
@Builder
@AllArgsConstructor()
@NoArgsConstructor
@Data
public class DataSourceModel {
/**
* 驱动
*/
private String driverClassName;
/**
* 驱动地址
*/
private String url;
/**
* 数据库连接名
*/
private String username;
/**
* 数据库密码
*/
private String password;
/**
* mybatis mapper.xml 地址
*/
private String mapperLocations;
}
package jykt.dla.com.cn.jyktdla.core.ds;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 数据源二 模型
*
* @author jxd
* @version 1.0 *
* @date 2021/6/17 14:20
*/
@Component
@ConfigurationProperties(prefix = "spring.datasource.db2")
public class Db2DataSourceModel extends DataSourceModel {
}
package jykt.dla.com.cn.jyktdla.core.ds;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 主数据源模型
*
* @author jxd
* @version 1.0 *
* @date 2021/6/17 14:20
*/
@Component
@ConfigurationProperties(prefix = "spring.datasource.primary")
public class PrimaryDataSourceModel extends DataSourceModel {
}
package jykt.dla.com.cn.jyktdla.core.ds;
import com.zaxxer.hikari.HikariDataSource;
/**
* HikariDataSource 数据源工厂 根据不同数据源返回不同数据源配置对象
*
* @author jxd
* @version 1.0 *
* @date 2021/6/17 15:05
*/
public class DataSourceModelFactory {
/**
* 获取数据源
* dataSourceModel 数据源模型父对象
*
* @return
* @author jxd
* @date 2021/6/17 15:06
*/
public static HikariDataSource getHikariDataSource(DataSourceModel dataSourceModel) {
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setDriverClassName(dataSourceModel.getDriverClassName());
hikariDataSource.setJdbcUrl(dataSourceModel.getUrl());
hikariDataSource.setUsername(dataSourceModel.getUsername());
hikariDataSource.setPassword(dataSourceModel.getPassword());
return hikariDataSource;
}
}
package jykt.dla.com.cn.jyktdla.core.config;
import com.zaxxer.hikari.HikariDataSource;
import jykt.dla.com.cn.jyktdla.core.ds.DataSourceModelFactory;
import jykt.dla.com.cn.jyktdla.core.ds.PrimaryDataSourceModel;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
* 主库
*
* @author jxd
* @version 1.0 *
* @date 2021/6/17 14:06
*/
@Configuration
@MapperScan(basePackages = "jykt.dla.com.cn.jyktdla.mapper.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {
@Autowired
private PrimaryDataSourceModel primaryDataSourceModel;
/**
* 配置数据源
*
* @return
* @author jxd
* @date 2021/6/17 14:40
*/
@Bean(name = "primaryDataSource")
public HikariDataSource getPrimaryDateSource() {
return DataSourceModelFactory.getHikariDataSource(primaryDataSourceModel);
}
/**
* session
*
* @param datasource
* @return
* @author jxd
* @date 2021/6/17 14:40
*/
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource datasource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
//mybatis扫描xml所在位置
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(primaryDataSourceModel.getMapperLocations()));
return bean.getObject();
}
@Bean("primarySqlSessionTemplate")
public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
package jykt.dla.com.cn.jyktdla.core.config;
import com.zaxxer.hikari.HikariDataSource;
import jykt.dla.com.cn.jyktdla.core.ds.DataSourceModelFactory;
import jykt.dla.com.cn.jyktdla.core.ds.Db2DataSourceModel;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
* db2数据源
*
* @author jxd
* @version 1.0 *
* @date 2021/6/17 14:06
*/
@Configuration
@MapperScan(basePackages = "jykt.dla.com.cn.jyktdla.mapper.db2", sqlSessionFactoryRef = "db2SqlSessionFactory")
public class Db2DataSourceConfig {
@Autowired
private Db2DataSourceModel db2DataSourceModel;
/**
* 配置数据源
*
* @return
* @author jxd
* @date 2021/6/17 14:40
*/
@Bean(name = "db2DataSource")
public HikariDataSource getdb2DateSource() {
return DataSourceModelFactory.getHikariDataSource(db2DataSourceModel);
}
/**
* session
*
* @param datasource
* @return
* @author jxd
* @date 2021/6/17 14:40
*/
@Bean(name = "db2SqlSessionFactory")
public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource datasource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
//mybatis扫描xml所在位置
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(db2DataSourceModel.getMapperLocations()));
return bean.getObject();
}
@Bean("db2SqlSessionTemplate")
public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
- 不同的数据源mapper接口跟xml文件放到不同的位置下,单元测试即可。