Я использую DBCP2 с Spring Security (XML конфигурация). Моя проблема в том, что каждый раз, когда я выполняю INSERT или UPDATE, создаю соединения (initialSize = 100), поэтому через некоторое время я получаю «Слишком много соединений».
Я не знаю, сделал ли я что-то неправильно в моей конфигурации или на другом шаге.
Это моя конфигурация:
1. springSecurity. xml file
<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. ДАО
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. Вызов из сервлета
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springSecurity.xml");
DAOAddress dao = (DAOAddress) context.getBean("DAOAddress");
dao.save(params);
context.registerShutdownHook();
Тот же процесс для каждого сервлета (телефон, электронная почта, адрес)
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();
}
}
Спасибо !!!