我有一个运行着附加 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/