項(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);
}
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-515908.html
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;
}
}
spring boot實(shí)現(xiàn)多數(shù)據(jù)源:Spring Boot集成Druid實(shí)現(xiàn)多數(shù)據(jù)源的兩種方式_濤哥是個(gè)大帥比的博客-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-515908.html
到了這里,關(guān)于Spring Boot多數(shù)據(jù)源事務(wù)@DSTransactional的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!