Spring?Boot多數(shù)據(jù)源事務@DSTransactional的使用詳解
項目場景:
Spring Boot集成com.baomidou,引入dynamic-datasource依賴,實現(xiàn)多數(shù)據(jù)源,這里說下事務問題:
1、一個方法中使用同一個數(shù)據(jù)源;
2、一個方法中使用了多個數(shù)據(jù)源;
解決方案:
這里把dao、service列出來
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;
/**
* 同一個數(shù)據(jù)源中的事務,都是數(shù)據(jù)源2
* 這里用的是spring的事務注解Transactional
* 這里必須加上注解多數(shù)據(jù)源注解@DS("db2"),否則使用的是默認數(shù)據(jù)源
*/
@DS("db2")
@Transactional
public void theSame() {
test2Dao.updateById(2,"第一次修改");
test2Dao.updateById(2,"第二次修改");
//這里報錯回滾
int i = 1/0;
}
/**
* 多數(shù)據(jù)源中的事務,同時使用數(shù)據(jù)源1、2
* 如果這里用spring的事務注解Transactional,那么使用的是默認數(shù)據(jù)源
* 這里不需要加上注解@DS
*/
@DSTransactional
public void notAlike() {
test1Dao.updateById(1,"第一次修改");
test2Dao.updateById(2,"第二次修改");
//這里報錯回滾
int i = 1/0;
}
}到此這篇關于Spring Boot多數(shù)據(jù)源事務@DSTransactional的使用詳解的文章就介紹到這了,更多相關SpringBoot @DSTransactional內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 用SpringBoot框架來接收multipart/form-data文件方式
- Springboot接收?Form?表單數(shù)據(jù)的示例詳解
- springboot2中使用@JsonFormat注解不生效的解決
- spring boot項目使用@JsonFormat失效問題的解決
- springboot如何接收application/x-www-form-urlencoded類型的請求
- spring中@Transactional?注解失效的原因及解決辦法
- Spring的編程式事務TransactionTemplate的用法詳解
- Spring模塊詳解之Spring ORM和Spring Transaction詳解
相關文章
Java報錯:ClassCastException問題解決方法
異常是程序中的一些錯誤,但并不是所有的錯誤都是異常,并且錯誤有時候是可以避免的,下面這篇文章主要給大家介紹了關于Java報錯:ClassCastException問題解決方法,需要的朋友可以參考下2024-07-07
SpringBoot整合MybatisPlus的基本應用詳解
MyBatis-Plus (簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為 簡化開發(fā)、提高效率而生,本文將給大家介紹一下SpringBoot整合MybatisPlus的基本應用,需要的朋友可以參考下2024-05-05
springboot文件上傳時maxPostSize設置大小失效問題及解決
這篇文章主要介紹了springboot文件上傳時maxPostSize設置大小失效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
Mybatis-Plus適配聯(lián)合主鍵實現(xiàn)方式
本文介紹了如何使用Mybatis-Plus(MP)和Mybatis-Plus-Plus(MPP)工具來處理聯(lián)合主鍵的問題,并詳細描述了整合過程、遇到的問題及解決方式2025-11-11

