【问题标题】:How to do simple Spring JDBC transactions outside the IoC container?如何在 IoC 容器外进行简单的 Spring JDBC 事务?
【发布时间】:2010-10-08 03:28:30
【问题描述】:

我正在处理的项目在其所有样板荣耀中使用直接 JDBC 数据访问,并且不使用任何事务。我觉得使用事务和简化数据访问方法的编写方式很重要,尤其是当前正在进行一些更改。该项目已经存在了很长一段时间,不适合 ORM 框架。它还使用了很多单例(呃),并且解开它以使其能够使用依赖注入将是相当多的工作,我认为我无法说服任何人我们现在应该这样做。

我喜欢 Spring JDBC 的接口,特别是通过它的SimpleJdbcTemplate。我的问题是关于如何为此启用一些简单的(每个 servlet 请求)事务,而不必在每个数据访问方法中以编程方式设置任何内容或使用 Spring IoC 容器或 AOP。我玩弄了自己的架构,最终得到一个类似于SimpleJdbcTemplate 的接口,并且在请求上下文中调用它时可以使用单个请求本地连接和事务(通过@987654323 @ 和 ThreadLocal)。它似乎工作得很好,但我认为使用像 Spring JDBC 这样的好的外部库会更好。

有人有这方面的经验吗?

【问题讨论】:

    标签: java jdbc transactions data-access spring-jdbc


    【解决方案1】:

    Spring 以声明方式为您处理事务,您不必担心编写 AOP 类。如果您使用的是 JDK 5 或更高版本以及 Spring 2.5,那么使用 annotations 会更好。

    我不同意 per-servlet 事务。您应该有一个服务层,它是应用程序中了解工作单元的部分。控制器调用处理事务的服务。

    【讨论】:

    • 我在问题中提到该应用程序当前不在 Spring 容器中,并且无法轻松移动到该容器中。如果可以的话,我很想使用这样的声明性事务。
    【解决方案2】:

    【讨论】:

    • 这并不像我想的那样工作,因为它需要在更高的应用程序级别使用 TransactionTemplate 以编程方式包装调用,而不是让对 JdbcTemplate 的每次调用都使用请求本地事务,如果可能的。不过它应该可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多