Spring?Boot多數(shù)據(jù)源事務(wù)@DSTransactional的使用詳解
項(xiàng)目場(chǎng)景:
Spring Boot集成com.baomidou,引入dynamic-datasource依賴,實(shí)現(xiàn)多數(shù)據(jù)源,這里說(shuō)下事務(wù)問(wèn)題:
1、一個(gè)方法中使用同一個(gè)數(shù)據(jù)源;
2、一個(gè)方法中使用了多個(gè)數(shù)據(jù)源;
解決方案:
這里把dao、service列出來(lái)
1、dao層
package com.test.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
//數(shù)據(jù)源1
@DS("db1")
@Mapper
public interface Test1Dao {
@Update("update test1 set name = #{name} where id = #{id}")
void updateById(@Param("id")Integer id, @Param("name")String name);
}package com.test.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.test.datasources.DataSourceNames;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
//數(shù)據(jù)源2
@DS(“db2”)
@Mapper
public interface Test2Dao {
@Update("update test2 set name = #{name} where id = #{id}")
void updateById(@Param("id")Integer id, @Param("name")String name);
}2、service層
package com.test.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.test.mapper.Test1Dao;
import com.test.mapper.Test2Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class TestService {
@Autowired
private Test1Dao test1Dao;
@Autowired
private Test2Dao test2Dao;
/**
* 同一個(gè)數(shù)據(jù)源中的事務(wù),都是數(shù)據(jù)源2
* 這里用的是spring的事務(wù)注解Transactional
* 這里必須加上注解多數(shù)據(jù)源注解@DS("db2"),否則使用的是默認(rèn)數(shù)據(jù)源
*/
@DS("db2")
@Transactional
public void theSame() {
test2Dao.updateById(2,"第一次修改");
test2Dao.updateById(2,"第二次修改");
//這里報(bào)錯(cuò)回滾
int i = 1/0;
}
/**
* 多數(shù)據(jù)源中的事務(wù),同時(shí)使用數(shù)據(jù)源1、2
* 如果這里用spring的事務(wù)注解Transactional,那么使用的是默認(rèn)數(shù)據(jù)源
* 這里不需要加上注解@DS
*/
@DSTransactional
public void notAlike() {
test1Dao.updateById(1,"第一次修改");
test2Dao.updateById(2,"第二次修改");
//這里報(bào)錯(cuò)回滾
int i = 1/0;
}
}到此這篇關(guān)于Spring Boot多數(shù)據(jù)源事務(wù)@DSTransactional的使用詳解的文章就介紹到這了,更多相關(guān)SpringBoot @DSTransactional內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 用SpringBoot框架來(lái)接收multipart/form-data文件方式
- Springboot接收?Form?表單數(shù)據(jù)的示例詳解
- springboot2中使用@JsonFormat注解不生效的解決
- spring boot項(xiàng)目使用@JsonFormat失效問(wèn)題的解決
- springboot如何接收application/x-www-form-urlencoded類型的請(qǐng)求
- spring中@Transactional?注解失效的原因及解決辦法
- Spring的編程式事務(wù)TransactionTemplate的用法詳解
- Spring模塊詳解之Spring ORM和Spring Transaction詳解
相關(guān)文章
容器環(huán)境的JVM內(nèi)存設(shè)置實(shí)踐記錄
Docker和K8S的興起,很多服務(wù)已經(jīng)運(yùn)行在容器環(huán)境,對(duì)于java程序,JVM設(shè)置是一個(gè)重要的環(huán)節(jié),這里總結(jié)下我們項(xiàng)目里的最佳實(shí)踐,對(duì)容器環(huán)境的JVM內(nèi)存相關(guān)知識(shí)感興趣的朋友一起看看吧2022-03-03
Java報(bào)錯(cuò):ClassCastException問(wèn)題解決方法
異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的,下面這篇文章主要給大家介紹了關(guān)于Java報(bào)錯(cuò):ClassCastException問(wèn)題解決方法,需要的朋友可以參考下2024-07-07
SpringBoot整合MybatisPlus的基本應(yīng)用詳解
MyBatis-Plus (簡(jiǎn)稱 MP)是一個(gè) MyBatis的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為 簡(jiǎn)化開(kāi)發(fā)、提高效率而生,本文將給大家介紹一下SpringBoot整合MybatisPlus的基本應(yīng)用,需要的朋友可以參考下2024-05-05
SpringBoot對(duì)接小程序微信支付的實(shí)現(xiàn)
本文主要介紹了SpringBoot對(duì)接小程序微信支付的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>2023-09-09
Java數(shù)據(jù)結(jié)構(gòu)之鏈表詳解
本篇文章我們將講解一種新型的數(shù)據(jù)結(jié)構(gòu)—鏈表,鏈表是一種使用廣泛的通用數(shù)據(jù)結(jié)構(gòu),它可以用來(lái)作為實(shí)現(xiàn)棧,隊(duì)列等數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ).文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-05-05
springboot文件上傳時(shí)maxPostSize設(shè)置大小失效問(wèn)題及解決
這篇文章主要介紹了springboot文件上傳時(shí)maxPostSize設(shè)置大小失效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Mybatis-Plus適配聯(lián)合主鍵實(shí)現(xiàn)方式
本文介紹了如何使用Mybatis-Plus(MP)和Mybatis-Plus-Plus(MPP)工具來(lái)處理聯(lián)合主鍵的問(wèn)題,并詳細(xì)描述了整合過(guò)程、遇到的問(wèn)題及解決方式2025-11-11

