java tomcat 连接池,java – tomcat 7 JDBC连接池 – 每个数据库的独立池?

我有一个关于Tomcat 7 JDBC连接池的基本问题:是为每个单独的数据库(即URL)创建的单独池吗?或者是创建的单个池,它保存来自任意数量的不同数据库的开放连接?

例如,如果我通过执行以下操作打开与数据库A和B的连接:

PoolProperties poolProperties = new PoolProperties();

poolProperties.setDriverClassName("org.postgresql.Driver");

poolProperties.setUrl("jdbc:postgresql://myserver/db_a");

poolProperties.setInitialSize(1);

poolProperties.setMaxActive(10);

poolProperties.setMaxIdle(1);

poolProperties.setMinIdle(0);

然后这个:

PoolProperties poolProperties = new PoolProperties();

poolProperties.setDriverClassName("org.postgresql.Driver");

poolProperties.setUrl("jdbc:postgresql://myserver/db_b");

poolProperties.setInitialSize(1);

poolProperties.setMaxActive(10);

poolProperties.setMaxIdle(1);

poolProperties.setMinIdle(0);

我刚刚创建了一个maxActive为10的池,或者两个池,每个池的maxActive值为10?如果它是一个池,如果在打开数据库B的连接时将maxActive更改为30,那么该怎么办?第一次调用setMaxActive是win,还是第二次调用覆盖,或者这是否会导致创建单独的池?

解决方法:

好的,我做了一些挖掘并自己弄清楚了. (感谢tomcat-users邮件列表中的许多人!)

JB Nizet是对的:如果您是从Java代码创建Tomcat数据库连接池,那么您实际按字面实例化的每个DataSource都是/表示一个单独的连接池.这让我很惊讶;来自.NET背景,我假设Tomcat连接池将像SqlServer / ADO.NET连接池一样工作:如果使用两个相同的连接字符串来获得两个数据库连接,这些连接池将来自同一个连接池.但是,在Tomcat中,当从Java代码实例化DataSource对象时,每个新的DataSource实例都是一个全新的连接池.因此,例如,如果要在JAX-RS Web服务调用中保留这些连接池,则需要构建自己的数据库池(DataSource)缓存,将DataSource实例(每个数据库一个)放入其中,然后存储它在JAX-RS将持续跨Web服务调用的对象中.我刚刚这样做了,它工作正常.

顺便说一句,Tomcat数据库连接池确实提供类似于SqlServer / ADO.NET连接池的功能,您只需使用JNDI资源来创建DataSource实例. (在我的情况下,这不是一个选项,因为数据库是在我的应用程序中动态创建的,而JNDI定义通常是从Tomcat在启动时读取的配置文件创建的.)

标签:java,postgresql,tomcat,jdbc,connection-pooling

来源: https://codeday.me/bug/20190628/1319810.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值