Nutz Dao与Spring集成实践
更新时间:2026年02月17日 12:33:07 作者:CV工程师(Ctrl)
文章介绍了在集成Spring和Nutz时处理事务管理的几种方式,包括手动管理、Spring声明式事务管理以及将事务交给Spring管理的方法
一、集成方式
1、采用Spring的IOC,但是事务还是采用Nutz自己管理控制;
2、采用Spring的声明式事务管理控制;
二、IOC
直接依据数据源注入即可
@Bean
public NutDao nutz(DataSource dataSource) {
return new NutDao (dataSource);;
}此时Nutz Dao的事务并不能通过Spring的事务来管理(如@Transactional注解、手动事务等),还是通过Nutz本身的 Trans.exec(() -> {}) 进行管理
例:
public void testService() {
Trans.exec(() -> {
dao.insert("test_table", Chain.make("id", 3));
throw new RuntimeException("test exception");
});
}三、将事务交给Spring管理
step1:继承NutDao类,重写run方法
public class SpringNutDao extends NutDao {
public SpringNutDao(DataSource dataSource) {
super(dataSource);
}
@Override
public void run(ConnCallback callback) {
Connection con = DataSourceUtils.getConnection(getDataSource());
try {
callback.invoke(con);
} catch (Exception e) {
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
} else {
throw new RuntimeException(e);
}
} finally {
DataSourceUtils.releaseConnection(con, getDataSource());
}
}
}step2:将继承类注入
@Bean
public NutDao nutz(DataSource dataSource) {
return new SpringNutDao(dataSource);
}step3:将数据源事务管理注入
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}例1:
@Transactional
public void testService() {
dao.insert("test_table", Chain.make("id", 3));
throw new RuntimeException("test exception");
}例2:
@Autowired
private PlatformTransactionManager transactionManager;
public void testService() {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus transactionStatus = transactionManager.getTransaction(def);
try{
dao.insert("test_table", Chain.make("id", 3));
throw new RuntimeException("test exception");
}catch (Exception e){
if (transactionStatus.isCompleted()) {
System.out.println("事务已完成,无需回滚");
}else {
transactionManager.rollback(transactionStatus);
}
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
举例讲解Java编程中this关键字与super关键字的用法
这篇文章主要介绍了Java编程中this关键字与super关键字的用法示例,super是this的父辈,在继承过程中两个关键字经常被用到,需要的朋友可以参考下2016-03-03
SpringBoot2.0 整合 SpringSecurity 框架实现用户权限安全管理方法
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。这篇文章主要介绍了SpringBoot2.0 整合 SpringSecurity 框架,实现用户权限安全管理 ,需要的朋友可以参考下2019-07-07
Swagger/Knife4j文档注解不更新问题的常见解决方案
在日常开发中,很多同学都会遇到明明改了 DTO 的 @Schema、@ApiModelProperty 注解,但打开 doc.html 或 swagger-ui 时,文档就是不更新,尤其是当 请求/响应对象用到了内部类(nested static class) 时,所以本文就把常见原因和解决方案总结出来,需要的朋友可以参考下2025-09-09
IDEA自带Maven插件找不到settings.xml配置文件
IDEA自带了Maven插件,最近发现了一个问题,IDEA自带Maven插件找不到settings.xml配置文件,本文就来详细的介绍一下解决方法,感兴趣的可以了解一下2023-11-11


最新评论