簡體   English   中英

DBCP2 初始化

[英]DBCP2 initialization

我將 DBCP2 與 Spring Security(XML 配置)一起使用。 我的問題是,每次我進行 INSERT 或 UPDATE 時都會創建連接(initialSize = 100),所以一段時間后我會得到“連接太多”。

我不知道我是否在配置或其他步驟中做錯了什么。

這是我的配置:

1.springSecurity.xml文件

<beans:bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> 
       <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
       <beans:property name="url" value="${bd.url}" />
       <beans:property name="username" value="${bd.user}" />
       <beans:property name="password" value="${bd.password}" />
       <beans:property name="validationQuery" value="SELECT 1" />
       <beans:property name="removeAbandonedTimeout" value="30" />
       <beans:property name="removeAbandonedOnBorrow" value="true" />
       <beans:property name="removeAbandonedOnMaintenance" value="true" />
       <beans:property name="initialSize" value="100" />
       <beans:property name="maxTotal" value="1000" />
       <beans:property name="maxIdle" value="50" />
       <beans:property name="timeBetweenEvictionRunsMillis" value="30" />        
   </beans:bean>

<beans:bean id="npjt" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" >
     <beans:constructor-arg ref="dataSource"/>
</beans:bean>

<beans:bean id="DAOEmail" class="general.Email"  >  
       <beans:property name="npjt" ref="npjt" />
</beans:bean> 

<beans:bean id="DAOAddress" class="general.Address" >  
    <beans:property name="npjt" ref="npjt" />
</beans:bean> 

<beans:bean id="DAOPhone" class="general.Phone" >  
    <beans:property name="npjt" ref="npjt" />
</beans:bean> 

<beans:bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <beans:property name="dataSource" ref="dataSource"/>
</beans:bean>

<tx:annotation-driven transaction-manager="txManager"/>

2.DAO

public interface DAOEmail{
    public void save(HashMap<String, String> params);
    public void update(HashMap<String, String> params);
}

public interface DAOPhone{
    public void save(HashMap<String, String> params);
    public void update(HashMap<String, String> params);
}

public interface DAOAddress{
    public void save(HashMap<String, String> params);
    public void update(HashMap<String, String> params);
}

3. 從 Servlet 調用

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springSecurity.xml");
 DAOAddress dao = (DAOAddress) context.getBean("DAOAddress");
 dao.save(params);
 context.registerShutdownHook();

每個 Servlet 的進程相同(電話、電子郵件、地址)

4. 每個文件的操作(地址、電話、電子郵件)

public class Address implements DAOAddress {

    private NamedParameterJdbcTemplate npjt;

    public NamedParameterJdbcTemplate getNpjt() {
        return npjt;
    }

    public void setNpjt(NamedParameterJdbcTemplate npjt) {
        this.npjt = npjt;
    }

    @Transactional
    @Override
    public void save(HashMap<String, String> params) {
       try { 
         ....
            npjt.update();  
         ....
       } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
       }
    }


@Transactional
    @Override
    public void update(HashMap<String, String> params) {
      try { 
         ....
            npjt.update();  
         ....
       } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
       }

    }

謝謝!!!

您需要在數據源配置中修改此值

<beans:property name="initialSize" value="100" />

“dataSource” bean 中的“initialSize”是池啟動時創建的初始連接數。 您配置中的該值為“100”。 是兩高。

刪除該屬性以使用默認值 (0) 或使用較低的值可以解決您的問題。

盡量對數據源使用最簡單的配置,參數最少,其他的使用默認值,如下所示:

<beans:bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> 
       <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
       <beans:property name="url" value="${bd.url}" />
       <beans:property name="username" value="${bd.user}" />
       <beans:property name="password" value="${bd.password}" />
       <beans:property name="validationQuery" value="SELECT 1" />     
   </beans:bean>

如果上述配置可以解決您的問題,請一一添加其他參數以檢查哪個參數導致問題。

希望以上解決方案可以提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM