关于多数据源的配置之前有整合过jdbc和springdata,但是这两种情况在实际的项目中用的不是很多,主要原因是jdbc的sql语句需要自己来写,后期维护什么的不是很好;springdata这块国内用的不是很多,相对而言坑比较多,一般企业级开发不是很敢用。本篇博客主要讲基于整合mybatis的多数据源配置。在写这篇博客之前也大致在网上看了一些资料,综合了这些资料进行了一个取长补短的配置,保证了代码在能够运行的同时更加简单。
正文
1.老规矩,先来看下项目结构图
2.pom.xml如下:
-
<?xml version="1.0" encoding="UTF-8"?> -
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> -
<modelVersion>4.0.0</modelVersion> -
<groupId>spring-boot</groupId> -
<artifactId>spring-boot-mybatis</artifactId> -
<version>0.0.1-SNAPSHOT</version> -
<packaging>jar</packaging> -
<name>spring-boot-mybatis</name> -
<description>Demo project for Spring Boot</description> -
<parent> -
<groupId>org.springframework.boot</groupId> -
<artifactId>spring-boot-starter-parent</artifactId> -
<version>1.5.9.RELEASE</version> -
<relativePath/> <!-- lookup parent from repository --> -
</parent> -
<properties> -
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> -
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> -
<java.version>1.8</java.version> -
</properties> -
<dependencies> -
<dependency> -
<groupId>org.mybatis.spring.boot</groupId> -
<artifactId>mybatis-spring-boot-starter</artifactId> -
<version>1.3.1</version> -
</dependency> -
<dependency> -
<groupId>org.springframework.boot</groupId> -
<artifactId>spring-boot-starter-test</artifactId> -
<scope>test</scope> -
</dependency> -
<dependency> -
<groupId>mysql</groupId> -
<artifactId>mysql-connector-java</artifactId> -
</dependency> -
<dependency> -
<groupId>com.alibaba</groupId> -
<artifactId>druid</artifactId> -
<version>1.0.29</version> -
</dependency> -
<dependency> -
<groupId>org.springframework.boot</groupId> -
<artifactId>spring-boot-starter-web</artifactId> -
</dependency> -
</dependencies> -
<build> -
<plugins> -
<plugin> -
<groupId>org.springframework.boot</groupId> -
<artifactId>spring-boot-maven-plugin</artifactId> -
</plugin> -
</plugins> -
</build> -
</project>
3.application.properties
-
spring.datasource.primary.url=jdbc:mysql://localhost:3306/test -
spring.datasource.primary.username=root -
spring.datasource.primary.password=19940315 -
spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver -
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/myweb -
spring.datasource.secondary.username=root -
spring.datasource.secondary.password=19940315 -
spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver
4.DataSourceConfig
【注意】@ConfigurationProperties:把配置文件的信息,读取并自动封装成实体类,无需进行set
-
package com.gwd.config; -
import javax.sql.DataSource; -
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; -
/** -
* @ProjectName spring-boot-datas-jpa -
* @author JackHisen(gu.weidong) -
* @Date 2018年2月16日 下午1:49:13 -
* @Version 1.0 -
* @Description: -
*/ -
@Configuration -
public class DataSourceConfig { -
@Bean(name = "primaryDataSource") -
@Qualifier("primaryDataSource") -
@ConfigurationProperties(prefix="spring.datasource.primary") -
public DataSource primaryDataSource() { -
DataSource dataSource = new com.alibaba.druid.pool.DruidDataSource(); -
return dataSource; -
} -
@Bean(name = "secondaryDataSource") -
@Qualifier("secondaryDataSource") -
@Primary -
@ConfigurationProperties(prefix="spring.datasource.secondary") -
public DataSource secondaryDataSource() { -
DataSource dataSource = new com.alibaba.druid.pool.DruidDataSource(); -
return dataSource; -
} -
}
PrimaryConfig:
【注意】这边设置了mapper的扫描路径,已经mapper.xml的位置
-
package com.gwd.config; -
import javax.sql.DataSource; -
import org.apache.ibatis.session.SqlSessionFactory; -
import org.mybatis.spring.SqlSessionFactoryBean; -
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.context.annotation.Primary; -
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -
import org.springframework.jdbc.datasource.DataSourceTransactionManager; -
/** -
* @ProjectName spring-boot-mybatis -
* @author JackHisen(gu.weidong) -
* @Date 2018年2月16日 下午9:52:48 -
* @Version 1.0 -
* @Description: -
*/ -
@Configuration -
//扫描 Mapper 接口并容器管理 -
@MapperScan(basePackages = PrimaryConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory") -
public class PrimaryConfig { -
// 精确到 master 目录,以便跟其他数据源隔离 -
static final String PACKAGE = "com.gwd.mapper.stu"; -
static final String MAPPER_LOCATION = "classpath:mapper/stu/*.xml"; -
@Autowired -
@Qualifier("primaryDataSource") -
private DataSource primaryDataSource; -
@Bean(name = "masterTransactionManager") -
@Primary -
public DataSourceTransactionManager masterTransactionManager() { -
return new DataSourceTransactionManager(primaryDataSource); -
} -
@Bean(name = "masterSqlSessionFactory") -
@Primary -
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource) -
throws Exception { -
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); -
sessionFactory.setDataSource(primaryDataSource); -
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() -
.getResources(PrimaryConfig.MAPPER_LOCATION)); -
return sessionFactory.getObject(); -
} -
}
SecondaryConfig:
-
package com.gwd.config; -
import javax.sql.DataSource; -
import org.apache.ibatis.session.SqlSessionFactory; -
import org.mybatis.spring.SqlSessionFactoryBean; -
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 org.springframework.jdbc.datasource.DataSourceTransactionManager; -
/** -
* @ProjectName spring-boot-mybatis -
* @author JackHisen(gu.weidong) -
* @Date 2018年2月16日 下午10:06:12 -
* @Version 1.0 -
* @Description: -
*/ -
@Configuration -
//扫描 Mapper 接口并容器管理 -
@MapperScan(basePackages = SecondaryConfig.PACKAGE, sqlSessionFactoryRef = "clusterSqlSessionFactory") -
public class SecondaryConfig { -
// 精确到 cluster 目录,以便跟其他数据源隔离 -
static final String PACKAGE = "com.gwd.mapper.user"; -
static final String MAPPER_LOCATION = "classpath:mapper/user/*.xml"; -
@Autowired -
@Qualifier("secondaryDataSource") -
private DataSource secondaryDataSource; -
@Bean(name = "clusterTransactionManager") -
public DataSourceTransactionManager clusterTransactionManager() { -
return new DataSourceTransactionManager(secondaryDataSource); -
} -
@Bean(name = "clusterSqlSessionFactory") -
public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) -
throws Exception { -
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); -
sessionFactory.setDataSource(secondaryDataSource); -
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() -
.getResources(SecondaryConfig.MAPPER_LOCATION)); -
return sessionFactory.getObject(); -
} -
}
5.model层
model层是mybatis的逆向工具自动生成
6.dao层【均是自动生成】
stuMapper:
-
package com.gwd.mapper.stu; -
import com.gwd.model.stu.Stu; -
public interface StuMapper { -
Stu selectByPrimaryKey(Integer id); -
}
userMapper:
-
package com.gwd.mapper.user; -
import com.gwd.model.user.User; -
public interface UserMapper { -
User selectByPrimaryKey(Integer id); -
}
7.service(忽略代码)和service实现类
【注意】不能忘了@service注解
stuServiceImpl:
-
package com.gwd.service.impl; -
import org.springframework.beans.factory.annotation.Autowired; -
import org.springframework.stereotype.Service; -
import com.gwd.mapper.stu.StuMapper; -
import com.gwd.model.stu.Stu; -
import com.gwd.service.StuService; -
/** -
* @ProjectName spring-boot-mybatis -
* @author JackHisen(gu.weidong) -
* @Date 2018年2月16日 下午10:10:25 -
* @Version 1.0 -
* @Description: -
*/ -
@Service -
public class StuServiceImpl implements StuService{ -
@Autowired -
StuMapper stuMapper; -
@Override -
public Stu getStuById(int id) { -
Stu stu = stuMapper.selectByPrimaryKey(id); -
return stu; -
} -
}
userServiceImpl:
-
package com.gwd.service.impl; -
import org.springframework.beans.factory.annotation.Autowired; -
/** -
* @ProjectName spring-boot-mybatis -
* @author JackHisen(gu.weidong) -
* @Date 2018年2月16日 下午10:09:43 -
* @Version 1.0 -
* @Description: -
*/ -
import org.springframework.stereotype.Service; -
import com.gwd.mapper.user.UserMapper; -
import com.gwd.model.user.User; -
import com.gwd.service.UserService; -
@Service -
public class UserServiceImpl implements UserService{ -
@Autowired -
UserMapper userMapper; -
@Override -
public User getUserById(int id) { -
User user = userMapper.selectByPrimaryKey(id); -
return user; -
} -
}
8.controller
package com.gwd.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gwd.model.stu.Stu;
import com.gwd.model.user.User;
import com.gwd.service.StuService;
import com.gwd.service.UserService;
/**
* @ProjectName spring-boot-mybatis
* @author JackHisen(gu.weidong)
* @Date 2018年2月16日 下午9:54:52
* @Version 1.0
* @Description:
*/
@RestController
public class TestController {
@Autowired
UserService userService;
@Autowired
StuService stuService;
@RequestMapping("getUser")
public String getUser() {
User user = userService.getUserById(6);
return user.getUsername();
}
@RequestMapping("getStu")
public String getStu() {
Stu stu = stuService.getStuById(1);
return stu.getName();
}
}
9.结果:成功!!!
--------------------- 作者:东天里的冬天 来源:CSDN 原文:https://blog.csdn.net/gwd1154978352/article/details/79331176?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!