java - 我可以动态更改 org.apache.tomcat.jdbc.pool.DataSource 的 maxActive 属性吗?

标签 java jdbc connection-pooling

我有一个运行着附加 Groovy 控制台的 Web 应用程序。

我通过 XML 配置了以下 bean:

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
        <property name="driverClassName" value="${db.driverClass}"/>
        <property name="url" value="${db.url}"/>
        <property name="username" value="${db.username}"/>
        <property name="password" value="${db.password}"/>
        <property name="validationQuery" value="${db.validationQuery}" />
        <property name="testOnBorrow" value="true" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="1800000" />
        <property name="numTestsPerEvictionRun" value="8" />
        <property name="removeAbandoned" value="true"/>
        <property name="logAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="60"/>

        <!--connection pooling props -->
        <property name="maxActive" value="${db.maxActive}"/>
        <property name="maxIdle" value="${db.maxIdle}"/>
        <property name="maxAge" value="${db.maxAge}"/>
        <property name="maxWait" value="${db.maxWait}"/>
        <property name="initialSize" value="${db.initialSize}"/>
        <property name="minIdle" value="${db.minIdle}"/>
    </bean>

通过 Groovy 控制台,我可以轻松调用:

appCtx.getBean("dataSource").setMaxActive(someNumber);

其中 appCtx 是我的 Spring 应用程序上下文。

我的问题是,这实际上会改变连接池的行为吗?我找到的所有链接似乎都集中在初始配置上。我正在尝试在池建立后修改配置。

最佳答案

我在文档中也找不到任何内容,但通过查看实现,我很确定它不打算支持初始化后的修改,原因如下:

  • 除了简单地更新字段值之外,没有编写任何代码来处理该属性的更新。
  • 有很多代码在 org.apache.tomcat.jdbc.pool.ConnectionPool.init() 中验证该属性。如果稍后设置该属性,则不会运行任何代码。
  • init() 方法还分配至少一个具有固定容量的队列,该容量永远不会在代码中的其他地方更新。

关于java - 我可以动态更改 org.apache.tomcat.jdbc.pool.DataSource 的 maxActive 属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26062625/

相关文章:

java - 使用 Java 关闭循环中的结果集

c# - 管理 SQL Server 连接

database - 在应用程序和数据库之间创建连接意味着什么?

java - 在 Spring Boot 中将属性放在 application.yml 或 bootstrap.yml 上有什么区别?

java - 每次加密使用随机盐时,我可以避免每次加密/解密调用的密码重新初始化吗?

java - 数据输入不进入sql数据库

java - 无法绑定(bind) ConnectionPoolDataSource 实例

java - AppCompatActivity 改变了我的 AlertDialog 设计

java - 在java中按字母顺序对数组进行排序

java - 使用预准备语句的 SQL 语法错误