主数据源的配置类:数据库用的是MySQL
package com.juqent.cps.system.config;
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.boot.jdbc.DataSourceBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;
import javax.sql.DataSource;
@Configuration
//这个是你需要使用主数据源要扫描的mapper接口文件的路径
@MapperScan(basePackages = "com.juqent.cps.**.mapper", sqlSessionTemplateRef = "sqlSessionTemplatePrimary")
public class PrimaryDataSourceConfig {
@Primary
@Bean(name = "primaryDataSource")
//@ConfigurationProperties(prefix = "spring.datasource.dynamic.druid.datasource.master")
public DataSource dataSource() {
return DataSourceBuilder.create().driverClassName("com.mysql.cj.jdbc.Driver")
.url("jdbc:mysql://192.168.0.157:3306/data?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true")
.username("root")
.password("123456").build();
}
@Primary
@Bean(name = "sqlSessionFactoryPrimary")
public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource, ApplicationContext applicationContext) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
//applicationContext.getResources( "classpath*:**/mapper/*/*.xml")这个路径是你要映射XML文件,也就是mapper接口对应的...Mapper.xml文件的路径
sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources( "classpath*:**/mapper/*/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Primary
@Bean(name = "sqlSessionTemplatePrimary")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
第二数据源的配置文件:用的数据库是SQLSever
package com.juqent.cps.system.config;
import com.juqent.cps.base.syn.SynchronizationMaterialTypeMapper;
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.jdbc.DataSourceBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
//这个mapper路径我为了防止主数据源扫描到所以没有把第二数据源mapper目录放到mapper目录下,我放到了syn目录下。
@MapperScan(basePackages = "com.juqent.cps.base.**.syn", sqlSessionTemplateRef = "sqlSessionTemplateSecondary")
public class SecondaryDataSourceConfig {
@Bean(name = "secondaryDataSource")
//@ConfigurationProperties(prefix = "mybatis.datasource.secondary")
public DataSource dataSource() {
return DataSourceBuilder.create().driverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
.url("jdbc:sqlserver://192.168.0.158:1433;databaseName=UFDATA_001_2018")
.username("sa")
.password("SA123sajuqent").build();
}
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource,
ApplicationContext applicationContext) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
//这个xml路径我是在mapper路径下多放了一层叫syn的目录下
sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath*:mapper/base/syn/*Mapper.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "sqlSessionTemplateSecondary")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
如果不想把数据库的账号密码写到代码里其实你可以用这个注解
@ConfigurationProperties(prefix = "mybatis.datasource.secondary")
注解下面的路径就是你数据源在配置文件中的配置路径。
目录结构这是两个数源配置文件的路径
至于pom里面的依赖我就不一一展示了,MySQL的比较简单,但是我第二数据源用的是sqlSever说以一定要把SqlServer的驱动依赖放进去
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.4.1.jre8</version> <!-- 版本号可能需要根据实际情况调整 -->
</dependency>