我们如何使用 jdbi 在 Dropwizard 中强制资源(控制器)级别的事务?

Posted

技术标签:

【中文标题】我们如何使用 jdbi 在 Dropwizard 中强制资源(控制器)级别的事务?【英文标题】:How do we force Resource(controller) level transaction in Dropwizard with jdbi? 【发布时间】:2014-07-13 19:55:44 【问题描述】:

在 Spring 中,我们有 @Transactional 注释,可以在 Controller 中指定,因此在控制器方法中发生的所有事情都被视为一个事务。 但是在 dropwizard 中,我们可以通过实现Transactional<DAOclass> 在 DAO 级别进行事务。但如果我在一个资源方法中使用两个 DAO,它会被视为两个不同的事务。

假设我有两个 DAO

Dao1.java

   public abstract class Dao1 implements Transactional<Dao1>
    @sqlQuery(//somequery)
    public abstract void insertIntoArticles();
   

Dao2.java

   public abstract class Dao2 implements Transactional<Dao2>
    @sqlQuery(//somequery)
    public abstract void insertIntoArticlesChildren();
   

ArticleResource.java

    @POST
    @PATH("/articles")
    public void insertArticleAndItsChildren(Integer articleId)
     try
       dao1.begin();
       dao2.begin();
       dao1.insertIntoArticles();
       dao2.insertIntoArticlesChildren();
       dao1.commit();
       dao2.commit();   
    catch(Exception e)
     dao1.rollback();
     dao2.rollback();
    

在上面的例子中,dao1 和 dao2 有两个不同的事务。但我需要单笔交易 那么有没有办法在资源级别指定事务边界?

【问题讨论】:

【参考方案1】:

看看这个帖子https://groups.google.com/forum/#!topic/jdbi/O5rxzwmlwjM

@CreateSqlObject 似乎是答案。

【讨论】:

以上是关于我们如何使用 jdbi 在 Dropwizard 中强制资源(控制器)级别的事务?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JDBI SQL 对象 API 创建一对多关系?

如何使用 H2-in-memory 数据库测试 JDBI DAO?

如何在 JDBI 中动态绑定表名

如何通过 dropwizard-flyway 库使用授权版本的 flyway

如何将JDBI添加到Spring Boot应用程序中?

在dropwizard应用程序中读取自定义配置文件时出错