0
final DataSource ds = DataSourceLocator.getInstance()
    .getDataSource(sg.cmpl.starhub.lprs.Constants.APP_KEY);
final DataSourceTransactionManager txManager = new DataSourceTransactionManager();
txManager.setDataSource(ds);

final DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
final TransactionStatus status = txManager.getTransaction(def);

Connection conn = null;
PreparedStatement ps = null;

try {

    /***************************************************************************/
    conn = DataSourceUtils.getConnection(ds);
    ps = conn.prepareStatement(sql);
    ps.execute();
    /***************************************************************************/

    txManager.commit(status);

} catch (Exception e) {
    txManager.rollback(status);
} 

我的事务管理器逻辑有问题吗?看起来很不稳定。当我插入新数据时,第一次似乎保存,后来我在 mysql 数据库中找不到数据。请帮忙。非常感谢。

4

3 回答 3

1

假设您有特殊原因想要进行编程连接和事务管理,我建议您查看 SpringJdbcTemplate并将其用法包装在TransactionTemplate.

但是,正如前面的评论中所述,您应该尽量避免程序化事务管理,而是使用注释 ( @Transactional) 或 XML 配置 (TransactionProxyFactoryBean<tx:advice/>)。

于 2009-07-08T22:49:41.193 回答
0

是的,有问题。这不是春天的方式。您不应该将提交/回滚逻辑放在这样的代码中。当您可以在配置中以声明方式执行此操作时,优势就来了。

查看Spring 事务参考文档

于 2009-04-25T10:14:37.707 回答
0

附带说明:根据 Spring 文档,如果提交操作因 TransactionException 而失败,则回滚已经被调用,并且在 catch 块中再次调用它会触发 IllegalTransactionStateException。

于 2012-09-24T18:14:44.693 回答