最近刚学习springboot,为了以后的开发需要故搭建双数据源配置,本文中使用了MySQL+SQLServer,若想在换成oracle数据库,直接在此数据配置的基础上进行再增加一个类似的配置,项目主要分为controller层,dao层,DataConfig层,entity层,service层,并且在每层中又区分为mysql与sqlserver
整个功能最主要的核心在于application.properties与DataConfig中的配置
并且在配置过程中也会遇到若干坑,接下来我将着重讲解比较坑的地方
application.properties
需要注意的一点在于这里应为jdbc-url,而不是url
#扫描映射文件
mybatis.mapper-locations=classpath:mapper/mysql_mapper/*.xml,classpath:mapper/sqlserver_mapper/*.xml
#配置mysql数据库
spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&autoReconnect=true&failOve\
rReadOnly=false&autoReconnectForPools=true&serverTimezone=UTC
spring.datasource.test1.username=root
spring.datasource.test1.password=root
#sqlserver数据库
spring.datasource.test2.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.test2.jdbc-url=jdbc:sqlserver://127.0.0.1:1433;databasename=testms
spring.datasource.test2.username=sa
spring.datasource.test2.password=root
#mybitis中打印sql语句
logging.level.com.example.testoubledatasource.dao.mysql_dao.*=debug
logging.level.com.example.testoubledatasource.dao.sqlserver_dao.*=debug
#过滤静态资源
spring.mvc.static-path-pattern=/**
#指定系统直接访问路径
spring.resources.static-locations = classpath:/templates/,classpath:/META-INF/resources/,classpath:/resources/
#热部署:修改后台文件保存后自动重启
#spring.devtools.restart.enabled=true
#Messages资源信息
#spring.messages.basename=messages
#关闭thymeleaf缓存 开发时使用 否则没有实时画面
spring.thymeleaf.cache=false
DataByMySQL
package com.example.testoubledatasource.DataConfig;
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.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
//basePackages为dao层接口(用来与数据库做交互)所在的包名
@Configuration
@MapperScan(basePackages = {
"com.example.testoubledatasource.dao.mysql_dao"},sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DataByMySQL {
// @ConfigurationProperties注解的作用就是从application.properties中读取以 spring.datasource.test1 开头的那些配置,并将其设置为数据源的配置
@Bean(name = "test1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource testDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "test1SqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource)throws Exception{
SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// 路径地址为mapper.xml所在的位置,这个xml是配置文件,处在resource里面,主要用来写查询语句
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql_mapper/*.xml"));
return bean.getObject();
}
@Bean(name = "test1TransactionManager")
public DataSourceTransactionManager testTransactionManager