最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot整合shardingsphere和seata實現分布式事務的實踐

 更新時間:2022年07月26日 10:46:02   作者:「已注銷」  
本文主要介紹了springboot整合shardingsphere和seata實現分布式事務的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

各個框架版本信息

  • springboot: 2.1.3
  • springcloud: Greenwich.RELEASE
  • seata: 1.0.0
  • shardingsphere:4.0.1

maven 依賴

? ? ? ?<dependency>
? ? ? ? <!--<groupId>io.shardingsphere</groupId>-->
? ? ? ? <groupId>org.apache.shardingsphere</groupId>
? ? ? ? <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
? ? </dependency>
? ? <!--sharding-jdbc 4.0.0 以后版本不能加starter 會導致啟動數據源沖突-->
? ? <!--<dependency>-->
? ? ? ? <!--<groupId>com.alibaba</groupId>-->
? ? ? ? <!--<artifactId>druid-spring-boot-starter</artifactId>-->
? ? <!--</dependency>-->
? ? <dependency>
? ? ? ? <groupId>com.alibaba</groupId>
? ? ? ? <artifactId>druid</artifactId>
? ? </dependency>

? ? <dependency>
? ? ? ? <groupId>com.alibaba.cloud</groupId>
? ? ? ? <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
? ? ? ? <exclusions>
? ? ? ? ? ? <exclusion>
? ? ? ? ? ? ? ? <groupId>io.seata</groupId>
? ? ? ? ? ? ? ? <artifactId>seata-all</artifactId>
? ? ? ? ? ? </exclusion>
? ? ? ? </exclusions>
? ? </dependency>
? ? <dependency>
? ? ? ? <groupId>io.seata</groupId>
? ? ? ? <artifactId>seata-all</artifactId>
? ? ? ? <version>1.0.0</version>
? ? </dependency>
? ? <dependency>
? ? ? ? <groupId>org.apache.shardingsphere</groupId>
? ? ? ? <artifactId>sharding-transaction-base-seata-at</artifactId>
? ? </dependency>

需要增加的切面類

@Component
@Aspect
@Slf4j
public class SeataTransactionalAspect {
?? ? ? @Before("execution(* com.XXX.dao.*.*(..))")
?? ? ? ?public void before(JoinPoint joinPoint) throws TransactionException {
?? ? ? ? ? ?MethodSignature signature = (MethodSignature)joinPoint.getSignature();
?? ? ? ? ? ?Method method = signature.getMethod();
?? ? ? ? ? ?log.info("攔截到需要分布式事務的方法," + method.getName());

? ? ? ? if(StringUtils.startsWithAny(method.getName(),"insert","save"
? ? ? ? ? ? ? ? ,"update","delete")){
? ? ? ? ? ? TransactionTypeHolder.set(TransactionType.BASE);
? ? ? ? }
? ? }
}

ProductServiceImpl代碼

@Service
public class ProductServiceImpl implements ProductService {

? ? @Resource
? ? UserFeignClient userFeignClient;

? ? @Resource
? ? ProductDao productDao;
? ??
?? ?@Override
? ? @GlobalTransactional(name="zhjy-product-tx-group",rollbackFor = Exception.class)
? ? public void createProduct(Product product) {
? ? ? ? productDao.insertProduct(product);
? ? ? ? ProductDesc proDesc = new ProductDesc();
? ? ? ? proDesc.setProductDesc(product.getProductDesc());
? ? ? ? proDesc.setStoreId(product.getStoreId());
? ? ? ? proDesc.setProductId(product.getProductId());
? ? ? ? productDao.insertProductDesc(proDesc);
// ? ? ? ?if(product.getProductName().endsWith("5")){
// ? ? ? ? ? ?int i = 1/0;
// ? ? ? ?}
// ? ? ? ?int j = 1/0;
? ? ? ? User user = new User();
? ? ? ? user.setAge(product.getPrice().intValue());
? ? ? ? user.setUserName(product.getProductName());
? ? ? ? user.setRealName(product.getProductName());
? ? ? ? String msg = userFeignClient.saveUser(user);
? ? ? ? //由于開啟了服務調用降級,所以需要統一返回錯誤碼,根據錯誤碼主動拋出異常,讓seata回滾事務
? ? ? ? if(msg.equals("新增用戶失敗")){
? ? ? ? ? ? ?int i = 1/0;
? ? ? ? }
? ? }
?}

UserFeignClient代碼

@FeignClient(name="service-user",fallbackFactory =UserFeignClientFallbackFactory.class)
public interface UserFeignClient {
? ? @GetMapping("/user/getUserById")
? ? @ResponseBody
? ? String getUserById(@RequestParam("id") Integer id);

? ? @GetMapping("/user/getUserByIdWithPathVariable/{id}")
? ? @ResponseBody
? ? String getUserByIdWithPathVariable(@PathVariable("id") Integer id);

? ? @PostMapping("/user/saveUser")
? ? @ResponseBody
? ? String saveUser(@RequestBody User user );

}

User服務 UserController代碼

@RestController
@Slf4j
@RefreshScope
public class UserController {
? ? @Autowired
? ? UserService userService;

? ? @PostMapping("/user/saveUser")
? ? @ResponseBody
? ? public String saveUser(@RequestBody User user) {
? ? ? ? userService.saveUser(user.getUserName(),user.getRealName(),user.getAge());

// ? ? ? ?if(user.getAge()>5){
? ? ? ? ? ? int i = 1/0;
// ? ? ? ?}
? ? ? ? return "sucess";
? ? }
}

UserServiceImpl代碼

@Service
public class UserServiceImpl implements UserService {?? ?
? ? @Resource
? ? UserDao userDao;

? ? @Override
? ? public void saveUser(String userName, String realName, Integer age) {
? ? ? ? userDao.insertUser(userName,realName,age);
? ? }

}

到此這篇關于springboot整合shardingsphere和seata實現分布式事務的實踐的文章就介紹到這了,更多相關springboot 分布式事務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mybatis 中的sql批量修改方法實現

    Mybatis 中的sql批量修改方法實現

    在項目中遇到需要批量更新的功能,原本想的是在Java中用循環(huán)訪問數據庫去更新,但是心里總覺得這樣做會不會太頻繁了,太耗費資源了,效率也很低,查了下mybatis的批量操作,原來確實有<foreach>標簽可以做到,下面通過本文給大家介紹下
    2017-01-01
  • Java函數式編程(十):收集器

    Java函數式編程(十):收集器

    這篇文章主要介紹了Java函數式編程(十):收集器,本文是系列文章的第10篇,其它文章請參閱本文底部的相關文章,需要的朋友可以參考下
    2014-09-09
  • Java模擬實現斗地主發(fā)牌

    Java模擬實現斗地主發(fā)牌

    這篇文章主要為大家詳細介紹了Java實現模擬斗地主發(fā)牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot實現JWT動態(tài)密鑰輪換的示例詳解

    SpringBoot實現JWT動態(tài)密鑰輪換的示例詳解

    這篇文章主要為大家詳細介紹了SpringBoot實現JWT動態(tài)密鑰輪換的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-10-10
  • Tomcat啟動分析(我們?yōu)槭裁匆渲肅ATALINA_HOME環(huán)境變量)

    Tomcat啟動分析(我們?yōu)槭裁匆渲肅ATALINA_HOME環(huán)境變量)

    本文主要介紹Tomcat啟動分析的知識,這里整理了相關資料及分析原因和如何實現的方法,有興趣的小伙伴可以參考下
    2016-09-09
  • Java如何接收XML格式參數并轉換為JSON

    Java如何接收XML格式參數并轉換為JSON

    在 Java 應用程序中,處理 XML 數據并將其轉換為 JSON 格式是很常見的任務,這篇文章為大家整理了一下具體的實現方法,希望對大家有所幫助
    2025-03-03
  • Netty分布式從recycler對象回收站獲取對象過程剖析

    Netty分布式從recycler對象回收站獲取對象過程剖析

    這篇文章主要為大家介紹了Netty分布式從recycler獲取對象的過程源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • java實現從方法返回多個值功能示例

    java實現從方法返回多個值功能示例

    這篇文章主要介紹了java實現從方法返回多個值功能,結合實例形式分析了集合類、封裝對象、引用傳遞三種實現方法,需要的朋友可以參考下
    2017-10-10
  • Java面試題沖刺第二十一天--JVM

    Java面試題沖刺第二十一天--JVM

    這篇文章主要為大家分享了最有價值的三道關于JVM的面試題,涵蓋內容全面,包括數據結構和算法相關的題目、經典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Springboot 使用 JSR 303 對 Controller 控制層校驗及 Service 服務層 AOP 校驗 使用消息資源文件對消息國際化

    Springboot 使用 JSR 303 對 Controller 控制層校驗及 Service 服務層 AOP 校驗

    這篇文章主要介紹了Springboot 使用 JSR 303 對 Controller 控制層校驗及 Service 服務層 AOP 校驗 使用消息資源文件對消息國際化的相關知識,需要的朋友可以參考下
    2017-12-12

最新評論

红安县| 墨玉县| 铜川市| 盐源县| 牙克石市| 郎溪县| 江门市| 鹤壁市| 顺昌县| 泉州市| 广灵县| 福贡县| 利津县| 威宁| 紫阳县| 东丽区| 宾川县| 潜江市| 天祝| 象州县| 陵川县| 南岸区| 齐齐哈尔市| 马龙县| 义马市| 三江| 西平县| 长子县| 广昌县| 昔阳县| 治县。| 内乡县| 聂拉木县| 蓬安县| 张家口市| 崇阳县| 永昌县| 晋江市| 宜州市| 克拉玛依市| 磐安县|