当前位置:网站首页>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使用实例.
边栏推荐
- How to quickly compare two byte arrays for equality in .NET
- 【手撕AHB-APB Bridge】~ AMBA总线 之 APB
- Digital twins help visualize the construction of smart cities
- ALV concept explanation
- 【流媒体】推流与拉流简介
- 对话亚洲高校首个博士论文奖-裘捷中丨KDD2022
- Day12 接口和协议
- .NET如何快速比较两个byte数组是否相等
- YOLOv5+BiSeNet——同时进行目标检测和语义分割
- vscode如何能将输出从OUTPUT改为TERMINAL或者DebugConsole
猜你喜欢
随机推荐
Flutter 常见异常分析
Thread线程类基本使用(下)
LM小型可编程控制器软件(基于CoDeSys)笔记二十五:plc的数据存储区(数字量输入通道部分)
Which thread pool does Async use?
vscode如何能将输出从OUTPUT改为TERMINAL或者DebugConsole
【数据分析】:什么是数据分析?
奥特学园ROS笔记--7(289-325节)
js: 实现一个cached缓存函数计算结果
C# Barrier类
特拉维夫大学 | Efficient Long-Text Understanding with Short-Text Models(使用短文本模型进行高效的长文本理解)
信息学奥赛一本通(1260:【例9.4】拦截导弹(Noip1999))
9,共模抑制比一-不受输入信号中共模波动的影响。【如何分析共模CM抑制比。】
模板的进阶
李沐动手学深度学习V2-bert预训练数据集和代码实现
"A daily practice, happy water problem" 1374. Generate a string with an odd number of each character
你是几星测试/开发程序员?技术型选手王大拿......
Bena's life cycle
【实战 已完结】WPF开发自动化生产管理平台
Solve the docker mysql can't write Chinese
Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换