mybatis+springboot+druid多数据源配置
现在数据库中间件基本取代了多数据源配置,大家可以去学习一下MyCat以及SharingSphere,有空的时候和大家分享一波。这次主要介绍的是一个项目中多数据源的配置,可以达到读写分离的效果,加上aop,简直就是一个注解无缝插入,有空也会上传aop的代码。大家一起学习一起进步。
整体梳理过程
- 加上注解
- application.properties/yml中配置
- 注入datasource和SqlsessionTemplate,并配置bean名称和@MapperScan
- 写自己的mapper
- 单测
0.注意点
加上这段annotation@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class})
1.在application.properties中配置如下
spring.datasource.gfu00.driver-class-name= **** spring.datasource.gfu00.url= **** spring.datasource.gfu00.username= **** spring.datasource.gfu00.password= **** spring.datasource.gfu01.driver-class-name= **** spring.datasource.gfu01.url = **** spring.datasource.gfu01.username = **** spring.datasource.gfu01.password = ****
2.配置多个datasource,并用druid创建datasource。此处也可用DataSourceBuilder.create().build()
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; 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; /** * multi-datasource config * * @author QY * @date 2019/10/18 */ @Configuration public class DataSourceConfig { @Bean("gfu00") @ConfigurationProperties(prefix = "spring.datasource.gfu00") public DataSource gfu00() { return DruidDataSourceBuilder.create().build(); } @Bean("gfu01") @ConfigurationProperties(prefix = "spring.datasource.gfu01") public DataSource gfu01() { return DruidDataSourceBuilder.create().build(); }
3.配置SqlSessionTemplate
3.1配置SqlSessionTemplate01
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 javax.sql.DataSource; /** * @author QY * @date 2019/10/18 */ @Configuration @MapperScan(basePackages = {"org.sjframework.learn.mybatis.dao"}, sqlSessionFactoryRef = "sqlSession00") public class Gfu00Config { @Autowired @Qualifier("gfu00") private DataSource gfu00; @Bean public SqlSessionFactory sqlSession00() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(gfu00); return factoryBean.getObject(); } @Bean("sessionTemplate00") public SqlSessionTemplate sessionTemplate00() throws Exception { return new SqlSessionTemplate(sqlSession00()); } }
3.2配置SqlSessionTemplate01
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 javax.sql.DataSource; /** * @author QY * @date 2019/10/18 */ @Configuration @MapperScan(basePackages = {"org.sjframework.learn.mybatis.read"}, sqlSessionFactoryRef = "sqlSession01") public class Gfu01Config { @Autowired @Qualifier("gfu01") private DataSource gfu01; @Bean public SqlSessionFactory sqlSession01() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(gfu01); return factoryBean.getObject(); } @Bean("sessionTemplate01") public SqlSessionTemplate sessionTemplate01() throws Exception { return new SqlSessionTemplate(sqlSession01()); } }
4.测试类
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.junit.Test; import org.junit.runner.RunWith; import org.mybatis.spring.SqlSessionTemplate; import org.sjframework.learn.mybatis.dao.UserDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * mybatis test * * @author QY * @date 2019/10/17 */ @RunWith(SpringRunner.class) @SpringBootTest @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class}) public class MultiDataSourceTest { @Autowired UserDao userDao; @Autowired @Qualifier("sessionTemplate00") SqlSessionTemplate sessionTemplate00; @Autowired @Qualifier("sessionTemplate01") SqlSessionTemplate sessionTemplate01; @Test public void loadContext() { Page<Map<String, String>> page = new Page<>(2, 100); Object userId00 = sessionTemplate00.selectOne("org.sjframework.learn.mybatis.dao.UserDao.multiDataSource", "userId"); Object userId01 = sessionTemplate01.selectOne("org.sjframework.learn.mybatis.read.UserDaoRead.multiDataSource", "userId"); System.out.println(userId00); } }
更多阅读
标签云
c
docker
excel
file
Flask
gin
golang
gorm
grpc
io流
JAVA
linux
lua
maven
MongoDB
mybatis
mybatis-plus
mysql
nginx
node
Ollama
orm
php
python
PyTorch
RabbitMQ
redis
rust
scala
sequelize
springboot
spring cloud
Spring Cloud Alibaba
spring security
thinkphp
time
uniapp
vue
websocket
反射
多线程
并发
微服务
注解
设计模式