跨线程共享的连接的JDBC自动提交

时间:2011-02-24 21:10:21

标签: multithreading jdbc autocommit

我有一个servlet,我得到一个Connection对象,然后将其交给两个工作线程进行各种活动。我现在需要在一个线程上添加一个事务。

如果我开始这样的交易:      connection.setAutoCommit(假);

这会影响两个线程吗?我想会的。

我是否必须单独连接每个线程?

由于

1 个答案:

答案 0 :(得分:1)

我认为你所做的是非常糟糕的做法。您无法在线程之间共享JDBC连接。

如果您在应用程序服务器(如TOMCAT / JBoss / WebSphere / WebLogic)下运行,请使用适当的DataSource来根据需要获取连接。

查看Application Server文档以获取有关如何执行此操作的信息。

你的servlet中会有这样的东西:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
    Connection c = null;
    try {
        c = ...; /* preferred way of getting a connection in your AppServer
        // do what you need with your JDBC connection
    } catch (Exception e) {
        // handle errors
    } finally {
        c.close(); /* you will need another TRY/CATCH here */
    }
}

同样,您的工作线程将具有以下内容:

public void run()
{
    Connection c = null;
    try {
        c = ...; /* preferred way of getting a connection in your AppServer
        // do what you need with your JDBC connection
    } catch (Exception e) {
        // handle errors
    } finally {
        c.close(); /* you will need another TRY/CATCH here */
    }
}

最终,您可以将auto commit设置为单独连接对象上所需的任何内容。