我使用postgres jdbc驱动程序连接到Amazon RedShift。以下是来自BasicDataSource
的{{1}}和来自DBCP 2.0.1
的{{1}}。我将JdbcTemplate
与Spring 4
注释一起使用。
看起来DataSourceTransactionManager
仍在继续创建新连接!
Transactional
我在控制台中看到每个操作另一个Connection对象(它们有不同的哈希码)。如果我切换到DataSource
所有工作都按预期工作,只有一个连接对象。
在致电 // that is how dataSource is created
BasicDataSource dataSource = new BasicDataSource() {
public Connection getConnection() throws SQLException {
Connection c = super.getConnection();
System.out.println("New connection: " + c);
return c;
}
};
dataSource.setUsername(env.getProperty(USERNAME));
dataSource.setPassword(env.getProperty(PASSWORD));
dataSource.setDriverClassName(env.getProperty(DRIVER_CLASS));
dataSource.setUrl(env.getProperty(CONNECTION_URL));
之前,我使用SingleConnectionDataSource
查看交易是否有效(他们是)......
jdbcTemplate#execute
参数...
UPD 感谢Evgeniy,我已经更改了代码,以确定何时真正创建了连接:
TransactionSynchronizationManager.isActualTransactionActive
现在我确实看到只创建了两个连接(如果我添加tcpKeepAlive=true
,则会在每次查询之前重新创建它们。)
所以我的怀疑是错误的,游泳池按预期工作。非常感谢!
答案 0 :(得分:1)
不同的哈希码不能证明它们是不同的物理连接。尝试在数据库上观看会话,您将看到来自BasicDataSource
的连接关闭并未关闭物理连接。