java
主页 > 软件编程 > java >

Nutz Dao与Spring集成介绍

2026-02-22 | 佚名 | 点击:

一、集成方式

1、采用Spring的IOC,但是事务还是采用Nutz自己管理控制;

2、采用Spring的声明式事务管理控制;

二、IOC

直接依据数据源注入即可

1

2

3

4

@Bean

public NutDao nutz(DataSource dataSource) {

    return new NutDao (dataSource);;

}

此时Nutz Dao的事务并不能通过Spring的事务来管理(如@Transactional注解、手动事务等),还是通过Nutz本身的 Trans.exec(() -> {}) 进行管理

例:

1

2

3

4

5

6

public void testService() {

    Trans.exec(() -> {

        dao.insert("test_table", Chain.make("id", 3));

        throw new RuntimeException("test exception");

    });

}

三、将事务交给Spring管理

step1:继承NutDao类,重写run方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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:将继承类注入

1

2

3

4

@Bean

public NutDao nutz(DataSource dataSource) {

    return new SpringNutDao(dataSource);

}

step3:将数据源事务管理注入

1

2

3

4

@Bean

public DataSourceTransactionManager  transactionManager(DataSource dataSource) {

    return new DataSourceTransactionManager(dataSource);

}

例1:

1

2

3

4

5

@Transactional

public void testService() {

    dao.insert("test_table", Chain.make("id", 3));

    throw new RuntimeException("test exception");

}

例2:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

@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);

        }

    }

 

}

原文链接:
相关文章
最新更新