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动态代理模式(从现实生活角度理解代码原理)

    JAVA动态代理模式(从现实生活角度理解代码原理)

    本文主要介绍了JAVA动态代理模式(从现实生活角度理解代码原理)的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Java字符串四大类之String、StringBuffer、StringBuilder、StringJoiner详解

    Java字符串四大类之String、StringBuffer、StringBuilder、StringJoiner详解

    String类、StringBuffer类和StringBuilder类提供了丰富的API/方法来处理字符串,包括但不限于字符串连接、替换、截取、比较、查找等,这篇文章主要介绍了Java字符串四大类之String、StringBuffer、StringBuilder、StringJoiner的相关资料,需要的朋友可以参考下
    2026-01-01
  • SpringBoot  jdbctemplate使用方法解析

    SpringBoot jdbctemplate使用方法解析

    这篇文章主要介绍了SpringBoot jdbctemplate使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • SpringBoot应用的接口访问从HTTP改为HTTPS

    SpringBoot应用的接口访问从HTTP改为HTTPS

    本文主要介绍了SpringBoot应用的接口访问从HTTP改为HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Java Web实现简易图书管理系统

    Java Web实现简易图书管理系统

    这篇文章主要为大家详细介绍了Java Web实现简易图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • 一篇文章详解JAVA中的@Schema注解

    一篇文章详解JAVA中的@Schema注解

    @Schema注解用于描述数据模型,包括类和属性,使得描述更加的详细和清楚,通常和swagger3一起使用,这篇文章主要介绍了JAVA中@Schema注解的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Java实现一个简单的长轮询的示例代码

    Java实现一个简单的长轮询的示例代码

    长轮询是与服务器保持即时通信的最简单的方式,它不使用任何特定的协议,例如 WebSocket ,所以也不依赖于浏览器版本等外部条件的兼容性。本文将用Java实现一个简单的长轮询,需要的可以参考一下
    2022-08-08
  • Spring Cloud Config配置详解

    Spring Cloud Config配置详解

    这篇文章主要介绍了Spring Cloud Config配置详解,Spring Cloud Config简化了配置管理的整个流程,包括配置的存放、获取、变更通知、自动刷新和安全保护,需要的朋友可以参考下
    2026-05-05
  • Mapreduce分布式并行编程

    Mapreduce分布式并行编程

    这篇文章主要为大家介绍了Mapreduce分布式并行编程使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Spring Boot项目利用Redis实现session管理实例

    Spring Boot项目利用Redis实现session管理实例

    本篇文章主要介绍了Spring Boot项目利用Redis实现session管理实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论