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标准库中Thread类的基本用法总结大全

    Java标准库中Thread类的基本用法总结大全

    Thread类是Java中用于表示线程的类,允许程序并发执行,线程是程序执行的最小单位,多个线程可以共享程序的资源,这篇文章主要介绍了Java标准库中Thread类基本用法的相关资料,需要的朋友可以参考下
    2026-01-01
  • 举例讲解Java编程中this关键字与super关键字的用法

    举例讲解Java编程中this关键字与super关键字的用法

    这篇文章主要介绍了Java编程中this关键字与super关键字的用法示例,super是this的父辈,在继承过程中两个关键字经常被用到,需要的朋友可以参考下
    2016-03-03
  • Java RandomAccessFile的用法详解

    Java RandomAccessFile的用法详解

    下面小编就为大家带来一篇Java RandomAccessFile的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Java枚举类型enum的详解及使用

    Java枚举类型enum的详解及使用

    这篇文章主要介绍了Java枚举类型enum的详解及使用的相关资料,需要的朋友可以参考下
    2017-05-05
  • SpringBoot2.0 整合 SpringSecurity 框架实现用户权限安全管理方法

    SpringBoot2.0 整合 SpringSecurity 框架实现用户权限安全管理方法

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。这篇文章主要介绍了SpringBoot2.0 整合 SpringSecurity 框架,实现用户权限安全管理 ,需要的朋友可以参考下
    2019-07-07
  • Java中的springboot监听事件和处理事件详解

    Java中的springboot监听事件和处理事件详解

    这篇文章主要介绍了Java中的springboot监听事件和处理事件,这个示例展示了如何在Spring Boot应用中定义自定义事件、发布事件以及监听事件,需要的朋友可以参考下
    2024-07-07
  • Swagger/Knife4j文档注解不更新问题的常见解决方案

    Swagger/Knife4j文档注解不更新问题的常见解决方案

    在日常开发中,很多同学都会遇到明明改了 DTO 的 @Schema、@ApiModelProperty 注解,但打开 doc.html 或 swagger-ui 时,文档就是不更新,尤其是当 请求/响应对象用到了内部类(nested static class) 时,所以本文就把常见原因和解决方案总结出来,需要的朋友可以参考下
    2025-09-09
  • IDEA自带Maven插件找不到settings.xml配置文件

    IDEA自带Maven插件找不到settings.xml配置文件

    IDEA自带了Maven插件,最近发现了一个问题,IDEA自带Maven插件找不到settings.xml配置文件,本文就来详细的介绍一下解决方法,感兴趣的可以了解一下
    2023-11-11
  • mybatis中的if-else及if嵌套使用方式

    mybatis中的if-else及if嵌套使用方式

    这篇文章主要介绍了mybatis中的if-else及if嵌套使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 详解SpringMVC的类型转换及验证方法

    详解SpringMVC的类型转换及验证方法

    在本篇文章里面我们给大家详细分析了SpringMVC的类型转换及验证方法的相关知识,对此有需要的朋友们学习下吧。
    2018-10-10

最新评论