2014-09-26 6 views
2

Groovy 콘솔이 연결된 웹 응용 프로그램이 있습니다.org.apache.tomcat.jdbc.pool.DataSource의 maxActive 속성을 동적으로 변경할 수 있습니까?

내가 XML을 통해 구성 다음 콩이 :

<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> 

그루비 콘솔을 통해를, 난 쉽게 호출 할 수 있습니다

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

appCtx 내 Spring 애플리케이션 컨텍스트입니다.

제 질문은이 입니다. 실제로은 연결 풀 동작을 변경합니다. 내가 찾은 모든 링크는 초기 구성에 집중하는 것 같습니다. 풀을 만든 후에 구성을 수정하려고합니다.

답변

1

검사에서 org.apache.tomcat.jdbc.pool.ConnectionPool의 경우 풀에서 연결을 가져올 때 maxActive 속성을 확인하는 것처럼 보입니다.

나는 경험에서 알 수는 없지만 런타임에이 값을 설정해야하는 것처럼 보입니다.

+0

이 코드는 실제로 런타임 확인을 받아야합니다. 코드에서 maxActive 속성이 런타임에 변경되지 않을 것으로 예상 할 수있는 것처럼 보입니다. – EricHenry

+0

동시에 풀은 JMX를 통해 노출 될 수 있습니다 ... – EricHenry

2

나도 문서에서 아무것도 찾을 수 있습니다,하지만 난이 다음과 같은 이유로 초기화 후 수정을 지원하기위한 아니에요 확신 구현보고에서 없습니다 :

  • 작성에는 코드가 없습니다 단순히 필드 값을 업데이트하는 것을 제외하고는 해당 속성에 대한 업데이트를 처리합니다.
  • org.apache.tomcat.jdbc.pool.ConnectionPool.init()에서 해당 특성을 검증하는 코드가 많이 있습니다. 속성을 나중에 설정하면 해당 코드가 실행되지 않습니다.
  • init() 메서드는 코드의 다른 위치에서 절대 업데이트되지 않는 고정 된 용량의 큐를 하나 이상 할당합니다.
관련 문제