欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解spring cloud config整合gitlab搭建分布式的配置中心

    詳解spring cloud config整合gitlab搭建分布式的配置中心

    這篇文章主要介紹了詳解spring cloud config整合gitlab搭建分布式的配置中心,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • JAVA8獲取list集合中重復的元素與獲取去重數據實例

    JAVA8獲取list集合中重復的元素與獲取去重數據實例

    這篇文章主要給大家介紹了關于JAVA8獲取list集合中重復的元素與獲取去重數據的相關資料,在實際開發(fā)中經常會遇到需要找出(刪除)一個list中某些元素的屬性相同的元素,需要的朋友可以參考下
    2023-07-07
  • Spring Boot中進行 文件上傳和 文件下載功能實現

    Spring Boot中進行 文件上傳和 文件下載功能實現

    開發(fā)Wb應用時,文件上傳是很常見的一個需求,瀏覽器 通過 表單形式 將 文件 以 流的形式傳遞 給 服務器,服務器再對上傳的數據解析處理,下面將通過一個案例講解使用 SpringBoot 實現 文件上傳,感興趣的朋友一起看看吧
    2024-07-07
  • Java Socket+mysql實現簡易文件上傳器的代碼

    Java Socket+mysql實現簡易文件上傳器的代碼

    最近在做一個小項目,項目主要需求是實現一個文件上傳器,通過客戶端的登陸,把本地文件上傳到服務器的數據庫(本地的)。下面通過本文給大家分享下實現代碼,感興趣的朋友一起看看吧
    2016-10-10
  • tio-boot整合hotswap-classloader實現熱加載方法實例

    tio-boot整合hotswap-classloader實現熱加載方法實例

    這篇文章主要為大家介紹了tio-boot整合hotswap-classloader實現熱加載方法實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Java8新特性-Lambda表達式詳解

    Java8新特性-Lambda表達式詳解

    Java 8 (又稱為 jdk 1.8) 是 Java 語言開發(fā)的一個主要版本。Lambda 表達式,也可稱為閉包,它是推動 Java 8 發(fā)布的最重要新特性。本文通過詳細的代碼示例介紹了Java8新特性感興趣的朋友可以參考一下
    2023-04-04
  • Java使用設計模式中迭代器模式構建項目的代碼結構示例

    Java使用設計模式中迭代器模式構建項目的代碼結構示例

    這篇文章主要介紹了Java使用設計模式中迭代器模式構建項目的代碼結構示例,迭代器模式能夠對訪問者隱藏對象的內部細節(jié),需要的朋友可以參考下
    2016-05-05
  • 使用jpa之動態(tài)插入與修改(重寫save)

    使用jpa之動態(tài)插入與修改(重寫save)

    這篇文章主要介紹了使用jpa之動態(tài)插入與修改(重寫save),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring Boot 中的 SockJS原理及使用方法

    Spring Boot 中的 SockJS原理及使用方法

    SockJS 的主要作用是提供一種 WebSocket 的兼容性解決方案,使得不支持 WebSocket 的瀏覽器也可以使用 WebSocket,本文介紹了Spring Boot中的SockJS,包括SockJS的原理,使用方法和示例代碼,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • Java 認識異常并掌握使用

    Java 認識異常并掌握使用

    所謂異常是指程序在運行時出現錯誤時提示調用者的機制,異常的種類有很多,不同種類的異常有不同的含義,也有不同的處理方式,通讀本篇對大家的學習或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09

最新評論