SpringBoot之SpringBoot整合多数据源
本来按照视屏来说,到上一章的打包运行就没有了,但是我百度翻了好一大波,找到了他的上一期中的其他剩余视屏
本来想写一章整合JSP的,但是其中存在一个问题,就是SpringBoot对JSP的支持不友好,强制整合完成后,打成jar包运行时会报找不到页面,只有打成war包才能用,对此我表示推荐使用Thymeleaf
概念:
多数据源?什么是多数据源,emmm,一听就是多个数据源,在单体式项目中一般不会使用到多数据源,一般单数据源就可以玩转了
创建数据库和表:
之前已经存在了一个数据库和表了,为了实现多数据源就再创建一个
使用navicat创建的,然后创建表,表的话换一个名字吧
建表语句
代码语言:javascript复制CREATE TABLE `dts` (
`id` int(11) NOT NULL,
`dts` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加Maven依赖:
代码语言:javascript复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springboot 整合mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
开始配置多数据源
为了不动原来的配置,我决定再次拷贝一个dts的环境出来
然后在主要的application.yml中激活
修改application-dts.yml配置
这里注意一个问题,如果是SpringBoot2以上配置多数据源需要把url改为jdbc-url,不然会报错
原来的数据源配置
新的数据库配置
多数据源其实对于作用领域是有多种实现形式,最常见的就是注解和分包,我采用分包来完成作用域的划分
重新定义目录结构,按照数据源的配置分了两个包,之前的向springboot中移动,下面的是新加的,关于
把Mapper按照不同的包分开,然后增加了新表的也就是新数据库中dts表的Mapper和Service
DtsMapper.java
代码语言:javascript复制package com.springboot.demo.springbootdts.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* @author ZYGisComputer
*/
@Mapper
public interface DtsMapper {
@Insert("insert into dts value(#{id},#{dts});")
int insertUser(@Param("id")String id,@Param("dts")String dts);
}
DtsService.java
代码语言:javascript复制package com.springboot.demo.service;
import com.springboot.demo.springbootdts.mapper.DtsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author ZYGisComputer
*/
@RestController
public class DtsService {
@Autowired
private DtsMapper dtsMapper;
@GetMapping("/dts")
public String insertDts(String id, String dts) {
return dtsMapper.insertUser(id, dts) > 0 ? "success" : "error";
}
}
编写配置类:
在config包下创建两个配置类,分别用于配置两个数据源
SpringBootDataSourceConfig.java
代码语言:javascript复制package com.springboot.demo.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.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.springboot.demo.springboot.mapper", sqlSessionFactoryRef = "springbootSqlSessionFactory")
public class SpringBootDataSourceConfig {
/**
* 将会员db注册到容器中
*
* @return
*/
@Bean(name = "springbootDataSource")
@ConfigurationProperties(prefix = "spring.datasource.springboot")
public DataSource springbootDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 将会员SqlSessionFactory注册到容器中
*
* @param dataSource
* @return
* @throws Exception
*/
@Bean(name = "springbootSqlSessionFactory")
public SqlSessionFactory springbootSqlSessionFactory(@Qualifier("springbootDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(springbootDataSource());
return sqlSessionFactoryBean.getObject();
}
/**
* 创建会员管理器
*
* @param dataSource
* @return
*/
@Bean(name = "springbootTransactionManager")
public DataSourceTransactionManager springbootTransactionManager(@Qualifier("springbootDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 创建订单sqlSesion模版
*
* @param sqlSessionFactory
* @return
* @throws Exception
*/
@Bean(name = "springbootSqlSessionTemplate")
public SqlSessionTemplate springbootSqlSessionTemplate(
@Qualifier("springbootSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
SpringBootDtsDataSourceConfig.java
代码语言:javascript复制package com.springboot.demo.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.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.springboot.demo.springbootdts.mapper", sqlSessionFactoryRef = "springbootdtsSqlSessionFactory")
public class SpringBootDtsDataSourceConfig {
/**
* 将会员db注册到容器中
*
* @return
*/
@Bean(name = "springbootdtsDataSource")
@ConfigurationProperties(prefix = "spring.datasource.springbootdts")
public DataSource springbootdtsDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 将会员SqlSessionFactory注册到容器中
*
* @param dataSource
* @return
* @throws Exception
*/
@Bean(name = "springbootdtsSqlSessionFactory")
public SqlSessionFactory springbootdtsSqlSessionFactory(@Qualifier("springbootdtsDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(springbootdtsDataSource());
return sqlSessionFactoryBean.getObject();
}
/**
* 创建会员管理器
*
* @param dataSource
* @return
*/
@Bean(name = "springbootdtsTransactionManager")
public DataSourceTransactionManager springbootdtsTransactionManager(@Qualifier("springbootdtsDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 创建订单sqlSesion模版
*
* @param sqlSessionFactory
* @return
* @throws Exception
*/
@Bean(name = "springbootdtsSqlSessionTemplate")
public SqlSessionTemplate springbootdtsSqlSessionTemplate(
@Qualifier("springbootdtsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
两个配置文件相似度90%只有其中的名字不一样
配置完成后启动项目,但是中途报了一个错误,找不到JdbcTemplate,如果是从前面的文章一直看到后面,因为之前整合过JdbcTemplate,所以他需要单独的数据源,直接注释掉
启动项目测试:
测试SpringBoot数据库插入数据
调用接口成功,查看数据库数据
这条就是新插入的
测试SpringBoot_dts数据库插入数据
查看数据库数据
插入成功,到此多数据源,分包策略整合完成
作者:彼岸舞
时间:2021 128
内容关于:SpringBoot
本文来源于网络,只做技术分享,一概不负任何责任