在使用oracle时,我可以让spring使用getpooledconnection而不是数据源中的getconnection吗?

bvk5enib  于 2021-07-15  发布在  Java
关注(0)|答案(2)|浏览(311)

我在一个简单的spring启动应用程序中有以下代码。。。

@Bean
public DataSource getDatasource(){
    DriverManagerDataSource ds = new DriverManagerDataSource();
    ds.setDriverClassName(driver);
    ds.setUsername(username);
    ds.setUrl(url);
    ds.setPassword(password);
    return ds;
}

这工作得很好,但我想连接池,所以我改为。。。

@Bean
public DataSource getDatasource(){
    try{
        OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();
        ds.setDriverType("thin");
        ds.setUser(username);
        ds.setNetworkProtocol("tcp");
        ds.setPassword(password);
        ds.setDatabaseName(dbName);
        ds.setServerName(serverName);
        return ds;
    } catch (SQLException throwables) {
        logger.error(throwables);
        System.exit(-1);
    }
    return null;
}

但从文件来看 getConnection 只返回一个本机连接,我需要配置spring来调用 getPooledConnection 相反。
有没有其他的bean我可以创建或者其他的方法可以做到这一点?

x4shl7ld

x4shl7ld1#

如果你用oracle做这个,你应该使用一个叫做ucp或通用连接池的库。。。

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ucp</artifactId>
    <version>21.1.0.0</version>
</dependency>

然后我用它来创建数据源,比如。。。

PoolDataSource ds = PoolDataSourceFactory.getPoolDataSource();
ds.setConnectionFactoryClassName(OracleDataSource.class.getName());
ds.setURL(url);
ds.setUser(username);
ds.setPassword(password);
ds.setInitialPoolSize(1);
ds.setMinPoolSize(1);
ds.setMaxPoolSize(10);
return ds;

我正在完成我的测试,以确保它是预期的工作。

3lxsmp7m

3lxsmp7m2#

要使用通用连接池(ucp),您确实需要类路径中的ucp.jar。有关示例,请参阅ucpsample.java。

相关问题