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.pswp.cn/news/273702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273702.shtml
英文地址,請注明出處:http://en.pswp.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: …