2

我正在对 JBOSS 中配置的数据源进行 jndi 查找

DataSource dataSource = (DataSource) new InitialContext().lookup(dataSourceStr);
return dataSource.getConnection();

使用 try-with-resource 关闭连接。获得连接对象后,我将在其上设置隔离属性,我需要它来实现我的功能。

connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);//1

操作完成后,我想检查连接中存在的隔离值,因为我使用上面给出的类似机制创建了连接对象,并测试了它的值,我发现它是 TRANSACTION_READ_COMMITTED(2),它是默认值,而不是我已经覆盖的值。这实际上是按我的意愿工作的。一旦我的操作完成,我没有再次将值重置为 TRANSACTION_READ_COMMITTED(2),但是当返回到池中时,它仍然会重置为原始的 TRANSACTION_READ_COMMITTED(2)。我很想知道这是如何发生的/我在哪里可以找到更多详细信息。

我在连接池中只保留了 1 个连接,所以我知道当我再次访问连接时,我得到了相同的连接对象,我之前在其上覆盖了值 TRANSACTION_READ_UNCOMMITTED 以进行隔离。我通过不关闭连接仔细检查了它,因此当我再次尝试访问它时它给出了错误。

我的问题是,当它返回池时,被覆盖的连接值如何被重置?

4

1 回答 1

0

你能发布你的数据源的配置吗?

JBoss/WildFly 未指定此行为,它取决于您使用的 DS 的实现。因此,您看到的行为可能会在特定于供应商的 DataSource 实现之间发生变化。

例如,如果您使用的是 postgres,您可以查看 github.com/pgjdbc/pgjdbc/blob/... 这是在池连接关闭时触发的侦听器.. 但似乎 postgres 没有这样的“重置”它的池连接行为

于 2020-12-04T09:51:18.380 回答