SpringBoot 配置多数据源(Sql Server、MySql)

创建SpringBoot项目就不说了。(直接使用IDEA创建就好了)

整个目录结构如图:(不用管图中报错,项目是在另一台电脑上写的。报错是没有jar包,因为网络比较慢。)

1、主要pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Test 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Spring Boot Mybatis 依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.2.0</version></dependency> <!-- MySQL 连接驱动依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector}</version></dependency> <!-- Druid 数据连接池依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.18</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>7.0.0.jre8</version></dependency></dependencies>

2、在配置文件中配置多数据源application.properties

## 默认的数据源
master.datasource.url=jdbc:mysql://localhost:3306/springbootdb?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
master.datasource.username=root
master.datasource.password=admin
master.datasource.driverClassName=com.mysql.jdbc.Driver
## 另一个的数据源
cluster.datasource.url=jdbc:sqlserver://localhost:1433;DatabaseName=tablename
cluster.datasource.username=sa
cluster.datasource.password=admin
cluster.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver

 我这配置SqlServer、MySql,如果需要连接MySql中的两个数据库。请自行更更改配置,并删除pom依赖。

3、配置mapper接口的数据源

MasterDataSourceConfig.java

package com.wzq.datasource2.config;import javax.sql.DataSource;import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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;@Configuration
//扫描 Mapper 接口并容器管理
@MapperScan(basePackages = {"com.wzq.datasource2.mapper.master"}, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {// 精确到 master 目录,以便跟其他数据源隔离static final String PACKAGE = "com.wzq.datasource2.mapper.master";static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";@Value("${master.datasource.url}")private String url;@Value("${master.datasource.username}")private String user;@Value("${master.datasource.password}")private String password;@Value("${master.datasource.driverClassName}")private String driverClass;@Primary@Bean(name = "masterDataSource")public DataSource masterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;}@Bean(name = "masterTransactionManager")@Primarypublic DataSourceTransactionManager masterTransactionManager() {return new DataSourceTransactionManager(masterDataSource());}@Bean(name = "masterSqlSessionFactory")@Primarypublic SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(masterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master/*.xml"));return sessionFactory.getObject();}
}

4、创建entity实体类

public class StuT {private static final long serialVersionUID = 1L;private Integer id;private String name;//get/set}public class Stu  {private static final long serialVersionUID = 1L;private Integer id;private String name;//get/set
}
ClusterDataSourceConfig.java
package com.wzq.datasource2.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.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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 com.alibaba.druid.pool.DruidDataSource;@Configuration
//扫描 Mapper 接口并容器管理
@MapperScan(basePackages = {"com.wzq.datasource2.mapper.cluster"}, sqlSessionFactoryRef = "clusterSqlSessionFactory")
public class ClusterDataSourceConfig {// 精确到 cluster 目录,以便跟其他数据源隔离static final String PACKAGE = "com.wzq.datasource2.mapper.cluster";static final String MAPPER_LOCATION = "classpath:mapper/cluster/*.xml";@Value("${cluster.datasource.url}")private String url;@Value("${cluster.datasource.username}")private String user;@Value("${cluster.datasource.password}")private String password;@Value("${cluster.datasource.driverClassName}")private String driverClass;@Bean(name = "clusterDataSource")public DataSource clusterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;}@Bean(name = "clusterTransactionManager")public DataSourceTransactionManager clusterTransactionManager() {return new DataSourceTransactionManager(clusterDataSource());}@Bean(name = "clusterSqlSessionFactory")public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("clusterDataSource") DataSource clusterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(clusterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/cluster/*.xml"));return sessionFactory.getObject();}
}

请根据实体类自行创建表 

5、编写mapper层

 

 

6、Service省略,目录结构如下:

 7、controller层

package com.wzq.datasource2.controller;import com.wzq.datasource2.entity.cluster.StuT;
import com.wzq.datasource2.entity.master.Stu;
import com.wzq.datasource2.service.cluster.StuTService;
import com.wzq.datasource2.service.master.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;@Controller
public class StuController {@Autowired@Qualifier(value = "stuServiceImpl")private StuService stuService;@Autowired@Qualifier(value = "stuTServiceImpl")private StuTService stuTService;@RequestMapping("/list")@ResponseBodypublic List<Stu> getAllStu(){return stuService.getAllStu();}@RequestMapping("/list2")@ResponseBodypublic List<StuT> getAllStuT(){return stuTService.getAllStuT();}}

总结:

1、配置多数据的目的是因为新项目需要用到老项目中的数据,而数据存放在两个不同的数据库当中,配置多数据源能很好的解决这一方面。还有一些公司进行了分库的操作,就比如一个指定增删改,一个指定查询。

2、 可能是我在配置数据源的时候使用了master或cluster,亦或者在配置mapper接口的数据源时指定的mastter或cluster,所以需要在mapperwen文件下创建master和cluster文件,以此来区分数据源的使用。

PS:报红是因为没有jar包!报红是因为没有jar包!报红是因为没有jar包!

GitHub网址:https://github.com/qz596766829/WzqRepository.git (datasoutrce2项目)

其他实现方式可以参考 SpringBoot + mybatis-plus 实现多数据源SpringBoot + mybatis-plus 实现多数据源。https://blog.csdn.net/qq_38080370/article/details/127514072 实现,通过注解的方式来指定数据源,而不用通过目录的方式来控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQL语句】MySql、SqlServer查询近期记录

#-------------------------MYSQL------------------------- #每小时记录 SELECT HOUR(open_time) hourNum, COUNT(1) hourCount FROM b_entrance_guard_record GROUP BY HOUR(open_time) #近六个月出入记录 SELECT MONTH(n.open_time) monthNum, COUN…

SpringBoot 记录操作日志

目录结构&#xff1a; 1、创建springboot项目&#xff0c;添加依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>…

SpringBoot 配置记录

# 图片上传 配置图片上传大小 spring:servlet:multipart:max-file-size: 100MBmax-request-size: 100MBdatasource:#数据库文件存放 /doc/sql目录下url: jdbc:mysql://localhost:3306/merchant_pay?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&f…

py2.7+pyqt4开发端口检测工具

py2.7pyqt4开发端口检测工具 使用工具&#xff1a;python2.7,pyqt4,pyinstaller,pywin32 先贴代码 1 import sys2 from PyQt4 import QtGui,QtCore3 4 import threading5 import thread6 import os7 import re8 import urllib9 import socket10 import time11 12 13 global max…

MySql 创建存储过程

DELIMITER $$ #以delimiter来标记用$表示存储过程结束 CREATE PROCEDURE ownerapartment() ##创建pre()存储方法 BEGIN DECLARE i INT; #定义i变量 SET i1; WHILE i<35 DO #对i的值配置INSERT INTO owner_apartment (id, owner_id,property_id, community_id, buildi…

opencv 和 parfor

一次遇到两个不熟悉的&#xff0c;因此在一起记一下。 OpenCV的全称是&#xff1a;Open Source Computer Vision Library。 OpenCv是一个基于&#xff08;开源&#xff09;发行的跨平台计算机视觉库&#xff0c;可以运行在Linux,Windows和Mac OS操作系统上。它轻量级而且高效—…

POI 导出

1.添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency> 2.POI工具类 import java.io.UnsupportedEncodingException; import javax.servlet.http.Htt…

度量空间的基本性质

收敛性 $\bf命题&#xff1a;$ 连续性 $\bf命题&#xff1a;$ 稠密性 $\bf命题&#xff1a;$设$E$为度量空间$X$中的点集&#xff0c;则$E$在$X$中稠密的充要条件是对任意的$x \in X$&#xff0c;存在点列$\left\{ {{x_n}} \right\} \subset E$&#xff0c;使得${x_n} \to x\…

@Value 注入静态变量

1、定义配置类 Component public class FilePathConfig {public static String httpResUrl;public static String savePath;public static String resUri;public String getHttpResUrl() {return httpResUrl;}Value("${file.path.httpResURL}")public void setHttpR…

配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...

今天遇到了这个问题&#xff0c; 电脑系统&#xff1a;vs2010 win7系统 iis7 我运行在iis中配置的那个网站后&#xff0c;报错&#xff1a;错误代码 0x800700b7 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节 这个问题原因在于window7的II…

Base64 四种方式的编码和解码

base64与字符串String之间的相互转换 package com.wzq;import javax.xml.bind.DatatypeConverter; import java.io.UnsupportedEncodingException; import java.util.Base64;/*** ClassName Base64Utils* Description: TODO* Author wzq* CreateDate 2019/10/14* UpdateDate 2…

邮件服务器“单点登录”功能

现状分析&#xff1a; 相信我们每个人都有这样的经历&#xff0c;比方说银行卡多的人要具体记忆每张卡的密码挺麻烦&#xff1b;现代人兴 趣广泛&#xff0c;爱好多多&#xff0c;运动健身俱乐部、娱乐游戏休闲、购物理财等各种场合少不了获得入门的“通行证”&#xff0c;要输…

【kafka】 windows平台搭建及使用

一、安装 kafka 需要java环境&#xff1b;kafka 最新版本内置了 zookeeper&#xff0c;所以不需要安装zookeeper&#xff1b;下载kafka最新版本&#xff0c;因为下载的是tgz文件&#xff0c;所以不需要安装&#xff0c;解压到相应的地方就可以了。下载地址&#xff1a;http://…

Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建

1.Linux Mint由Linux Mint Team团队于2006年开始发行&#xff0c;是一份基于Debian和Ubuntu的Linux发行版。其目标是提供一种更完整的即刻可用体验&#xff0c;这包括提供浏览器插件、多媒体编解码器、对DVD播放的支持、Java和其他组件&#xff0c;它也增加了一套定制桌面及各种…

@TableLogic注解表示逻辑删除

TableLogic注解表示逻辑删除 效果&#xff1a;在字段上加上这个注解再执行BaseMapper的删除方法时&#xff0c;删除方法会变成修改 场景&#xff1a; 1.实体类中属性加上TableLogic, TableLogic private Integer dataStatus; 2.调用BaseMapper的deleteById(id)或…

图片上传至本地

1.配置文件 bootstrap.yml file:path:httpResURL: http://122.246.1.148:19086SAVE_PATH: /data/imagesresURI: /wzq/ 2.文件工具类 import cn.hutool.core.io.FileUtil; import com.vinsuan.park.platform.biz.FilePathConfig; import lombok.AllArgsConstructor; import lo…

html调用静态json例子

html调用静态json例子 1.json {"current": 2,"result": "success" } 1.html <!doctype html> <html> <head> <meta charset"utf-8"> <title></title> <script src"http://code.jquery.co…

Extjs发票管理系统

技术特点&#xff1a;Extjs框架&#xff0c;三层架构&#xff0c;Ajax,json 1.仿office2007菜单.介面美观大方,可动态更改皮肤保存至cookie。 2,json数据源与实体类的相互转换. 3.可下载桌面版登录方式,统计在线人数. 4, chm操作手册,方便操作人员熟悉. 功能描述&#xff1a; 1…

jQuery调用WebService返回JSON数据

相信大家都比较了解JSON格式的数据对于ajax的方便&#xff0c;不了解的可以从网上找一下这方面的资料来看一下&#xff0c;这里就不多说了&#xff0c;不清楚的可以在网上查一下&#xff0c;这里只说一下因为参数设置不当引起的取不到返回值的问题。 在用jQuery调用WebService的…

Docker---问题1:bash: vi: command not found/bash: vim: command not found

在使用docker时&#xff0c;有时候我们需要编辑配置文件&#xff0c;需要使用vim或者vi命令&#xff0c;发现&#xff1a; root64801a03b121:/etc/nginx/conf.d# vi default.conf bash: vi: command not found root64801a03b121:/etc/nginx/conf.d# vim default.conf bash: …