当前位置:网站首页>Bee 事务注解 @Tran 使用实例
Bee 事务注解 @Tran 使用实例
2022-08-02 20:29:00 【abckingaa】
Bee 事务注解 @Tran 使用实例
注意事项和使用步骤如下:
## 注意事项
### 1.不要在接口使用@Tran注解;接口的方法上使用也不起效果.
### 2.直接在使用main运行,@Tran不起效.
```java
public static void main(String[] args) {
TranTest test=new TranTest();
test.testTran();
}
```
### 3. 直接在本类中,调用本类的一个@Tran标志的方法不起效果.
// testTran2(); //直接使用不起效果.
要使用以下方式:
// @Autowired
// AccountRest self; //在本类中,调用本类的一个@Tran标志的方法. //AccountRest是本类的类名
// self.testTran2(); //在本类中,调用本类的一个@Tran标志的方法.
参考:AccountRest.java
### 4.不使用接口,直接在类里使用@Tran
参考:TranTest3
然后在其它类里,调用TranTest3的方法.
### [email protected]作用于类级别,所有的方法,都会被拦截.要确保是否所有的方法都需要,若只有部分方法需要,
只在需要的方法上使用@Tran即可.
TranService接口,不需要写@Tran
一般建议使用以下方式.
```java
@Service
@Tran
public class TranTest implements TranService {
...
}
/**
* 不要在接口使用@Tran注解.
* 接口的方法上使用也不起效果.
* @author Kingstar
* @since 1.17
*/
public interface TranService {
public void testTran();
public void testTran4();
}
```
### [email protected]的默认实现,是从V1.17提供.需要将TranHandler交给spring容器管理.
若没有使用bee-springboot,需要将TranHandler交给spring容器管理.
<bean id="tranHandler" class="org.teasoft.beex.transaction.TranHandler"></bean>
### 7.为什么在接口中不能直接放@Tran注解.
https://cloud.tencent.com/developer/article/1862474
### 8.为什么直接在本类中,不能调用本类的一个@Tran标志的方法(不起效果).
https://blog.csdn.net/ai_xiangjuan/article/details/79478186?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0-79478186-blog-80891911.pc_relevant_multi_platform_whitelistv1&spm=1001.2101.3001.4242.1&utm_relevant_index=3
## 使用步骤
### [email protected]的默认实现,是从V1.17提供.需要将TranHandler交给spring容器管理.
若没有使用bee-springboot,需要将TranHandler交给spring容器管理.
<bean id="tranHandler" class="org.teasoft.beex.transaction.TranHandler"></bean>
### 2 使用@Tran注解
使用时,需要避免 注意事项提到的问题.
@Autowired
TranService tranService;
tranService.testTran(); // 将@Tran独立到一个实现接口的类,可以.
### 3 检查@Tran是否生效
除了业务上检测外,可以通过查看日志
```properties
[INFO] [Bee] Tran annotation intercept in TranHandler, start...
.... 其它日志
[INFO] [Bee] Tran annotation intercept in TranHandler, end...
```
主要Java源码
package com.tran.rest;
import static com.automvc.common.service.CommService.isNullPara;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.teasoft.bee.osql.BeeSQLException;
import org.teasoft.bee.osql.Suid;
import org.teasoft.bee.osql.service.ObjSQLRichService;
import org.teasoft.bee.osql.service.ObjSQLService;
import org.teasoft.bee.osql.transaction.Tran;
import org.teasoft.honey.osql.core.BeeFactoryHelper;
import com.automvc.common.jq.Result;
import com.tran.entity.Account;
import com.tran.service.PrdSettingsService;
/**
* @author AiTeaSoft.com
* @since 1.0
* Create on 2022-07-19
*/
@RestController
@RequestMapping("/account")
public class AccountRest {
@Autowired
TranService tranService;
// @Autowired
// AccountRest self; //在本类中,调用本类的一个@Tran标志的方法.
@Autowired
private ObjSQLService objSQLService;
@Autowired
private ObjSQLRichService objSQLRichService;
@Autowired
TranTest3 tranTest3;
@Autowired(required = true)
PrdSettingsService prdSettingsService;
@RequestMapping("/list")
public Result list(Account account,
@RequestParam(value = "page", defaultValue = "1", required = false) int page,
@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {
Result result = new Result();
if (isNullPara(result, account)) return result;
try {
prdSettingsService.saveadd();
// testTran2(); //直接使用不起效果.
// self.testTran2(); //在本类中,调用本类的一个@Tran标志的方法.
tranService.testTran(); // 将@Tran独立到一个实现接口的类,可以.
List<Account> list = null;
int total = objSQLRichService.count(account);
if (total == 0) {
list = new ArrayList<>();
} else {
list = objSQLRichService.select(account, (page - 1) * rows, rows);
}
result.setRows(list);
result.setTotal(total);
} catch (BeeSQLException e) {
result.setErrorMsg(e.getMessage());
}
return result;
}
@RequestMapping("/list3")
public Result list3(Account account,
@RequestParam(value = "page", defaultValue = "1", required = false) int page,
@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {
Result result = new Result();
if (isNullPara(result, account)) return result;
tranTest3.testTran();
result.setMsg("不使用接口,直接在类里使用@Tran");
return result;
}
// 连了在方法级别没有事务注解的
@RequestMapping("/list4")
public Result list4(Account account,
@RequestParam(value = "page", defaultValue = "1", required = false) int page,
@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {
Result result = new Result();
if (isNullPara(result, account)) return result;
try {
prdSettingsService.saveadd();
// testTran2(); //直接使用不起效果.
// self.testTran2(); //在本类中,调用本类的一个@Tran标志的方法.
tranService.testTran4(); // 将@Tran独立到一个实现接口的类,可以.
List<Account> list = null;
int total = objSQLRichService.count(account);
if (total == 0) {
list = new ArrayList<>();
} else {
list = objSQLRichService.select(account, (page - 1) * rows, rows);
}
result.setRows(list);
result.setTotal(total);
} catch (BeeSQLException e) {
result.setErrorMsg(e.getMessage());
}
return result;
}
@RequestMapping("/list5")
public Result list5(Account account,
@RequestParam(value = "page", defaultValue = "1", required = false) int page,
@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {
Result result = new Result();
if (isNullPara(result, account)) return result;
tranService.testTran5();
result.setMsg("使用@Tran,检测发生异常时,rollback");
return result;
}
@Tran
public void testTran2() {
Suid suid = BeeFactoryHelper.getSuid(); // 1
Account account = new Account();
account.setDescriptioin("test tran");
System.out.println("---------00000------------------------");
suid.insert(account); // 2.1 插入
suid.select(account); // 2.2 查询
}
}
查看事务注解日志
查看事务注解异常 rollback
Bee事务注解@Tran使用实例工程-Java文档类资源-CSDN下载
Bee事务注解@Tran使用实例工程; 基于Spring boot + Bee;
涉及spring aop, 注解拦截,应该有类上和应该在方法的注解拦截.
@within,@annotation使用实例.
边栏推荐
猜你喜欢
ssdp协议搜索GB28181设备
信息系统项目管理师必背核心考点(五十八)变更管理的主要角色
.NET如何快速比较两个byte数组是否相等
广东省数字经济发展指引 1.0之建成数据安全保障体系
DataGrip 安装教程 详细版
【目标检测】YOLOv5:640与1280分辨率效果对比
一款免费的容器安全 SaaS 平台使用记录
Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换
The software testing process specification is what?Specific what to do?
php 单引号 双引号 -> => return echo
随机推荐
LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路
数据库分析与优化
模板的进阶
软件成分分析:华为云重磅发布开源软件治理服务
传感器工作原理
56.【全局变量和局部变量专题】
新增指令 v-memo
J9 Digital Currency Theory: Identifying Web3's New Scarcity: Open Source Developers
10 种最佳 IDE 软件 ,你更忠爱哪一个?
Details in C# you don't know
The five classification of software testing
李沐动手学深度学习V2-BERT预训练和代码实现
一次线上事故,我顿悟了异步的精髓
Solve the docker mysql can't write Chinese
V - memo new instructions
callback prototype __proto__
ICLR 2022最佳论文:基于对比消歧的偏标签学习
Wintun:一款惊艳的 WireGuard 虚拟网卡接口驱动
《分布式微服务电商》专题(一)-项目简介
Triacetin是什么化学材料