springboot(三)整合多数据源

多数据库如何定位自己的数据源:1、分包名  2、注解形式,常用的就是分包名形式

1.我们案例以两个数据源为例子讲解:

首先我们准备两个数据库,一个springboot库(users表),一个springboottest(stu表)库,如下图:

2.导入pom依赖:

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!-- 测试 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!-- mysql 依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- springboot-web组件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

 3.properties文件配置:

###datasource1
spring.datasource.has.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.has.jdbc-url = jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8
spring.datasource.has.username = root
spring.datasource.has.password = root
###datasource2
spring.datasource.jjy.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.jjy.jdbc-url = jdbc:mysql://localhost:3306/springboottest?useUnicode=true&characterEncoding=utf-8
spring.datasource.jjy.username = root
spring.datasource.jjy.password = root

  注意:springboot2.0版本之前多数据源使用url没有问题,但是2.0版本开始需要使用jdbc-url否则会报错

            这里采用分包机制,数据源配置中一个has包,一个jjy包

4.新建两个包:com.ansheng.config.has  ,com.ansheng.config.jjy 数据源配置,然后分别新建HasDataSourceConfig类和JjyDataSourceConfig类,如下图所示:

HasDataSourceConfig源码:

package com.ansheng.config.has;

import javax.sql.DataSource;

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.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.fasterxml.jackson.databind.ser.std.DateSerializer;

@Configuration
@MapperScan(basePackages="com.ansheng.has",sqlSessionTemplateRef="hasSqlSessionTemplate")
public class HasDataSourceConfig {
	 @Bean(name="hasDataSource")
     @ConfigurationProperties(prefix="spring.datasource.has")
	 public DataSource hasDataSource() {
		 return DataSourceBuilder.create().build();
	 }
	 
	 //sqlsession
	    @Bean(name = "hasSqlSessionFactory")
		public SqlSessionFactory hasSqlSessionFactory(@Qualifier("hasDataSource") DataSource dataSource)
				throws Exception {
			SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
			bean.setDataSource(hasDataSource());
			return bean.getObject();
		}
     
	    @Bean(name = "hasTransactionManager")
		public DataSourceTransactionManager hasTransactionManager(@Qualifier("hasDataSource") DataSource dataSource) {
			return new DataSourceTransactionManager(dataSource);
		}

		@Bean(name = "hasSqlSessionTemplate")
		public SqlSessionTemplate hasSqlSessionTemplate(
				@Qualifier("hasSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
			return new SqlSessionTemplate(sqlSessionFactory);
		}

}

JjyDataSourceConfig源码:

package com.ansheng.config.jjy;

import javax.sql.DataSource;

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.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.fasterxml.jackson.databind.ser.std.DateSerializer;

@Configuration
@MapperScan(basePackages="com.ansheng.jjy",sqlSessionTemplateRef="jjySqlSessionTemplate")
public class JjyDataSourceConfig {
	 @Bean(name="jjyDataSource")
     @ConfigurationProperties(prefix="spring.datasource.jjy")
	 public DataSource jjyDataSource() {
		 return DataSourceBuilder.create().build();
	 }
	 
	 //����sqlsession
	    @Bean(name = "jjySqlSessionFactory")
		public SqlSessionFactory jjySqlSessionFactory(@Qualifier("jjyDataSource") DataSource dataSource)
				throws Exception {
			SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
			bean.setDataSource(jjyDataSource());
			return bean.getObject();
		}
     
	    @Bean(name = "jjyTransactionManager")
		public DataSourceTransactionManager jjyTransactionManager(@Qualifier("jjyDataSource") DataSource dataSource) {
			return new DataSourceTransactionManager(dataSource);
		}

		@Bean(name = "jjySqlSessionTemplate")
		public SqlSessionTemplate jjySqlSessionTemplate(
				@Qualifier("jjySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
			return new SqlSessionTemplate(sqlSessionFactory);
		}

}

5.新建mapper接口,既然多数据源,那就新建两个包,一个com.ansheng.has,一个com.ansheng.jjy,分别新建象个接口

HasMapper.java和JjyMapper.java,目录结构如下图:

6.新建一个controller

controller源码:

package com.ansheng.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Conditional;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.ansheng.has.HasMapper;
import com.ansheng.jjy.JjyMapper;

@RestController
public class TestController {
	@Autowired
	private HasMapper hasMapper;
	@Autowired
	private JjyMapper jjyMapper;
	@RequestMapping("/testHas")
    public String Testhas() {
		String name="古三通";
		String descr="不败顽童";
		int i=hasMapper.insertUsersInfo(name,descr);
		if(i>0) {
			return "has-success";
		}else {
			return "has-fail!";
		}
 	}
	
	@RequestMapping("/testJjy")
    public String Testjjy() {
	   String name="杨戬";
	   String classx="灌江口";
	   int i=jjyMapper.insertStuInfo(name,classx);
	   if(i>0) {
		   return "jjy-success!";
	   }else {
		   return "jjy-fail!";
	   }
 	}
}

注意:时间关系这里省略service层,我直接在controller中调用mapper层

7.HasMapper源码:

8.JjyMapper源码:

9.新建启动类app.java

10.测试,访问接口:http://localhost:8080/testHas

访问接口:http://localhost:8080/testJjy

11.这个时候我们查看数据库,先看springboot库的users表是否有数据:

然后查看springboottest库的stu表:

12.ok,多数据元配置成功,测试通过,有没有感觉很easy,项目工程源码地址:

https://download.youkuaiyun.com/download/royal1235/12114551

 

感兴趣的小伙伴可以扫码关注下公众号哦,公众号会分享高质量的技术文章哦

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒书

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值