1

私は次のようなSpringデータソースを持っています。独自のSpringコンテキストを持つコアモジュールで、maxActivetimeを設定したくありません

<bean id="wssModelDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="net.sourceforge.jtds.jdbcx.JtdsDataSource"/>
    <property name="url" value="com.wss.jdbc.ConnectionUrl=jdbc:jtds:sqlserver://x-x2/x_control_QA;appName=wss;sendStringParametersAsUnicode=false;loginTimeout=20;socketTimeout=180"/>
    <property name="username" value="xxx"/>
    <property name="password" value="xxx"/>
  </bean>

独自のSpringコンテキストを持つコアモジュールに依存する依存モジュールがあり、このコンポーネントでデータソースのmaxIdle時間を設定したい

<property name="wssModelDataSource.maxIdle" value="40"/>

また、wssModelDataSourceに依存する他の多くのモジュールがありますが、それらのmaxIdle時間を変更したくありません。

私の質問は、<property name="wssModelDataSource.maxIdle" value="40"/>Springコンテキストファイルのルートに置くとエラーが発生することです

4

2 に答える 2

2

代わりにこれを行うことができます:

一般的な小道具を使用して抽象的なベースBeanを定義します。

<bean id="baseDatasource" abstract="true" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="net.sourceforge.jtds.jdbcx.JtdsDataSource"/>
    <property name="url" value="com.wss.jdbc.ConnectionUrl=jdbc:jtds:sqlserver://x-x2/x_control_QA;appName=wss;sendStringParametersAsUnicode=false;loginTimeout=20;socketTimeout=180"/>
    <property name="username" value="xxx"/>
    <property name="password" value="xxx"/>

  </bean>

次に、必要に応じて特定の変更を加えて、これから子データソースを定義します。

<bean id="wssModelDataSource" parent="baseDatasource">
    <property name="maxIdle" value="40">
</bean>
于 2012-10-16T19:26:00.373 に答える
2
<bean class="com.wss.spring.DataSourcePropertyOverrider" >
    <property name="maxIdle" value="#{com.wss.jdbc.MaximumIdleConnections}"/>
    <property name="minIdle" value="#{com.wss.jdbc.MinimumIdleConnections}"/>
    <property name="initialSize" value="#{com.wss.jdbc.InitConnectionSize}"/>
      </bean>

BeanFactoryPostProcessor実装を作成し、postProcessBeanFactoryメソッドをオーバーライドします

public class DataSourcePropertyOverrider implements BeanFactoryPostProcessor {

    private int maxIdle;
    private int minIdle;
    private int initialSize ;
    /**
     *
     * @param beanFactory
     * @throws BeansException
     */
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        BasicDataSource dataSource  = (BasicDataSource)beanFactory.getBean("wssModelDataSource");

        if(dataSource != null){
            dataSource.setMaxIdle(maxIdle);
            dataSource.setMinIdle(minIdle);
            dataSource.setInitialSize(initialSize);
        }

        //To change body of implemented methods use File | Settings | File Templates.
    }


    public int getMaxIdle() {
        return maxIdle;
    }

    public void setMaxIdle(int maxIdle) {
        this.maxIdle = maxIdle;
    }

    public void setMinIdle(int minIdle) {
        this.minIdle = minIdle;
    }

    public int getMinIdle() {

        return minIdle;
    }

    public int getInitialSize() {
        return initialSize;
    }

    public void setInitialSize(int initialSize) {
        this.initialSize = initialSize;
    }
}
于 2012-10-16T20:02:07.923 に答える