java – JOOQ和交易
我一直在读约
transactions & jooq,但我很难看到如何在实践中实现它.
假设我向JOOQ提供了一个自定义的ConnectionProvider,它恰好将一个连接池与autocommit设置为false. 实施大致如下: @Override public Connection acquire() throws DataAccessException { return pool.getConnection(); } @Override public void release(Connection connection) throws DataAccessException { connection.commit(); connection.close(); } 我将如何将两个jooq查询包装到单个事务中? DefaultConnectionProvider很容易,因为只有一个连接 – 但是有一个池我不知道该怎么做. 解决方法
jOOQ 3.4 Transaction API
使用jOOQ 3.4,已经添加了一个transaction API,用于对JDBC,Spring或JTA事务管理器进行抽象.此API可以与Java 8一起使用: DSL.using(configuration) .transaction(ctx -> { DSL.using(ctx) .update(TABLE) .set(TABLE.COL,newValue) .where(...) .execute(); }); 或者使用Java 8之前的语法 DSL.using(configuration) .transaction(new TransactionRunnable() { @Override public void run(Configuration ctx) { DSL.using(ctx) .update(TABLE) .set(TABLE.COL,newValue) .where(...) .execute(); } }); 这个想法是,lambda表达式(或匿名类)形成事务代码,其中: >正常完成时提交
一个春天的例子 当前的文档显示了使用Spring进行事务处理的一个例子: > http://www.jooq.org/doc/latest/manual/getting-started/tutorials/jooq-with-spring/ 这个例子基本上归结为使用Spring TransactionAwareDataSourceProxy <!-- Using Apache DBCP as a connection pooling library. Replace this with your preferred DataSource implementation --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" init-method="createDataSource" destroy-method="close"> <property name="driverClassName" value="org.h2.Driver" /> <property name="url" value="jdbc:h2:~/maven-test" /> <property name="username" value="sa" /> <property name="password" value="" /> </bean> <!-- Using Spring JDBC for transaction management --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="transactionAwareDataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"> <constructor-arg ref="dataSource" /> </bean> <!-- Bridging Spring JDBC data sources to jOOQ's ConnectionProvider --> <bean class="org.jooq.impl.DataSourceConnectionProvider" name="connectionProvider"> <constructor-arg ref="transactionAwareDataSource" /> </bean> 从GitHub可以看到一个正在运行的示例: > https://github.com/jOOQ/jOOQ/tree/master/jOOQ-examples/jOOQ-spring-example 春天和贵族的例子 虽然我个人不会推荐它,但有些用户已经成功取代了Guice的Spring DI的一部分,并处理与Guice的交易.对于这种用例,GitHub还有一个经过整合测试的运行示例: > https://github.com/jOOQ/jOOQ/tree/master/jOOQ-examples/jOOQ-spring-guice-example (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |