池数据库连接上的EndToEndMetrics:是否隔离?

时间:2014-05-19 09:22:57

标签: java database-connection datasource

我办公室的dba提出以下内容来审核数据库访问(oracle):

将当前登录的用户作为数据库连接上的属性(java.sql.Connection)放在我的应用程序中。

public class ClientInfoProvider { 
    void enrichConnection(Connection connection, String userName)  throws SQLException  {
        OracleConnection oConn = (OracleConnection) connection;
            String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX];
            metrics[OracleConnection.END_TO_END_CLIENTID_INDEX] = userName;
            oConn.setEndToEndMetrics(metrics, (short) 0);
    }
}

public class AuditableDataSource implements DataSource {
...
    @Override
    public Connection getConnection() throws SQLException {
        Connection connection = dataSource.getConnection();
        clientInfoProvider.enrichConnection(connection, loggedInUserString);
        return connection;
    }

...
}

我主要担心的是连接汇集在一起​​。 Wil用户最终不会使用相同的连接?更改连接属性的最后一个用户可能会影响已在使用此连接的其他用户。这是正确的假设吗?

1 个答案:

答案 0 :(得分:0)

使用Spring jdbc数据源,jdbc连接只能运行足够长的时间来执行它的查询。执行查询并关闭结果集后,连接也将关闭并释放到池中以用于其他查询。