我们如何使用 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 中强制资源(控制器)级别的事务?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 H2-in-memory 数据库测试 JDBI DAO?