Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不带事务管理器的jdbctemplate的动态数据源_Java_Spring_Transactions_C3p0_Spring Transactions - Fatal编程技术网

Java 不带事务管理器的jdbctemplate的动态数据源

Java 不带事务管理器的jdbctemplate的动态数据源,java,spring,transactions,c3p0,spring-transactions,Java,Spring,Transactions,C3p0,Spring Transactions,我有一个场景,其中我需要在应用程序运行期间动态切换数据源 时间 为此,我有一个JDBCManager类,它维护一个池数据源(C3P0)的映射,在特定SpringJDBCTemplate的请求下,我查看了键并返回相应的jdbctemplate和数据源。如下 public JdbcTemplate getJdbcTemplate(long targetId) throws DataAccessDeniedException { return new JdbcTemplate(this.map

我有一个场景,其中我需要在应用程序运行期间动态切换数据源 时间

为此,我有一个JDBCManager类,它维护一个池数据源(C3P0)的映射,在特定SpringJDBCTemplate的请求下,我查看了键并返回相应的jdbctemplate和数据源。如下

public JdbcTemplate getJdbcTemplate(long targetId) throws DataAccessDeniedException {
    return new JdbcTemplate(this.map.get(targetId));
}

我没有在配置中配置任何事务管理器,也没有在实际创建数据源时附加任何事务管理器,如下所示

我怀疑交易有问题或存在连接泄漏


我的疑问是,在没有配置事务管理器的情况下,jdbctemplate是否会适当地释放/管理连接?

我不理解这种情况,您需要切换DS(例如,杀死旧的DS并用新的DS替换),还是在实现时需要一个池。为什么使用DriverManager数据源?它是一个简单的impl,每次都返回新的连接。我在地图中维护一个数据源池,并尝试使用apache数据源。导入org.apache.commons.dbcp.BasicDataSource;我无法控制这个来源,因此需要接受它。但您是否看到它是因为DriverManager数据源?我的问题是,jdbctemplate负责连接管理吗?
DriverManagerDataSource dataSource = null;
    dataSource = new DriverManagerDataSource();
    // DataSource dataSource = DataSources.unpooledDataSource();
    dataSource.setDriverClassName(driverClassName);
    dataSource.setUrl(url);
    dataSource.setUsername(userId);
    dataSource.setPassword(userPassword);

    DataSource pooledDataSource;
    try {
        Map<String, Object> overrides = new HashMap<String, Object>();

        overrides.put("minPoolSize", minPoolSize);
        overrides.put("maxPoolSize", maxPoolSize);
        overrides.put("acquireIncrement", acquireIncrement);
        overrides.put("maxIdleTime", maxIdleTime);
        overrides.put("idleConnectionTestPeriod", idleConnectionTestPeriod);
        overrides.put("maxIdleTimeExcessConnections", maxIdleTimeExcessConnections);
        overrides.put("numHelperThreads", numHelperThreads);
        overrides.put("unreturnedConnectionTimeout", unreturnedConnectionTimeout);
        overrides.put("checkoutTimeout", checkoutTimeout);

        // create the PooledDataSource with overrides
        pooledDataSource = DataSources.pooledDataSource(dataSource, overrides);
    } catch (SQLException e) {
        logger.error("Could not create pooled datasource for target: " + targetId);
        throw new RuntimeException(e);
    }        
    // cache the pooledDataSource
    this.map.put(targetId, pooledDataSource);

    return pooledDataSource;
}
Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@65d43d1e -- timeout at awaitAvailable()
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1416)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:606)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:526)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:756)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:683)
... 61 more