my project was working fine with spring 3.2 but after i udate it to spring 5 my connections to db stay open for 30 min and 1 transaction take 7 connections. i use c3p0 for database connection. i didn't change the code and this is my config
<bean id="pum"
class="com.exp.jpa.integration.KaraPersistenceUnitManager">
<property name="persistenceXmlLocations" value="${jpa.persistenceXmlLocations}"/>
<property name="persistenceUnitPostProcessors">
<bean class="com.exp.framework.jpa.MergingPersistenceUnitPostProcessor"/>
</property>
<property name="defaultDataSource" ref="dataSource"/>
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceUnitManager" ref="pum"/>
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.dialect" value="${jpa.hibernate.dialect}"/>
<entry key="hibernate.default_schema" value="${jpa.schema}"/>
<entry key="hibernate.connection.autocommit" value="true"/>
<entry key="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
<entry key="hibernate.show_sql" value="${jpa.show_sql}"/>
<entry key="hibernate.format_sql" value="true"/>
<entry key="hibernate.proc.param_null_passing" value="true"/>
</map>
</property>
<property name="jpaDialect">
<bean class="com.exp.framework.db.KaraHibernateJpaDialect">
<property name="name" value="Main"/>
</bean>
</property>
<property name="jpaVendorAdapter">
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="ORACLE"/>
<property name="showSql" value="false"/>
</bean>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" destroy-method="close">
<constructor-arg index="0" value="KaraPool"/>
<property name="driverClass" value="${jpa.dataSource.driverClass}"/>
<property name="description" value="main pool data source"/>
<property name="jdbcUrl" value="${jpa.dataSource.jdbcUrl}"/>
<property name="user" value="${jpa.connection.user}">
</property>
<property name="password" value="${jpa.connection.password}">
</property>
<property name="autoCommitOnClose" value="false"/>
<property name="forceIgnoreUnresolvedTransactions" value="false"/>
<property name="initialPoolSize" value="${jpa.dataSource.initPoolSize:1}"/>
<property name="minPoolSize" value="${jpa.dataSource.minPoolSize:1}"/>
<property name="maxPoolSize" value="${jpa.dataSource.maxPoolSize:10}"/>
<property name="maxIdleTime" value="${jpa.dataSource.maxIdleTime:300}"/>
<property name="debugUnreturnedConnectionStackTraces" value="true"/>
<property name="propertyCycle" value="${jpa.dataSource.propertyCycle:60}"/>
<!-- In Second -->
<property name="acquireRetryDelay" value="${jpa.dataSource.acquireRetryDelay:1000}"/>
<!-- In Mili Second -->
<property name="maxConnectionAge" value="${jpa.dataSource.maxConnectionAge:0}"/>
<!-- In Second -->
<property name="checkoutTimeout" value="${jpa.dataSource.checkoutTimeout:5000}"/>
<!-- In Mili Second -->
<property name="acquireIncrement" value="${jpa.dataSource.acquireIncrement:1}"/>
<property name="numHelperThreads" value="${jpa.dataSource.numHelperThreads:5}"/>
<property name="acquireRetryAttempts" value="${jpa.dataSource.acquireRetryAttempts:1}"/>
<property name="unreturnedConnectionTimeout"
value="${jpa.dataSource.unreturnedConnectionTimeout:600}"/>
<!-- In Second -->
<property name="breakAfterAcquireFailure" value="${jpa.dataSource.breakAfterAcquireFailure:false}"/>
<property name="testConnectionOnCheckout" value="${jpa.dataSource.testConnectionOnCheckout:false}"/>
<property name="testConnectionOnCheckin" value="${jpa.dataSource.testConnectionOnCheckin:false}"/>
<property name="preferredTestQuery" value="select 0 from dual"/>
</bean>
<bean name="mbeanServer"
class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="locateExistingServerIfPossible" value="true"/>
<property name="registerWithFactory" value="true"/>
</bean>
<bean id="register" class="com.mchange.v2.c3p0.management.DynamicPooledDataSourceManagerMBean">
<constructor-arg index="0" ref="dataSource"/>
<constructor-arg index="1">
<bean factory-bean="pooledDataSourceName" factory-method="getPooledDataSourceObjectName"/>
</constructor-arg>
<constructor-arg index="2" ref="mbeanServer"/>
</bean>
<bean id="pooledDataSourceName" class="com.exp.framework.db.PooledDataSourceBeanNameFactory">
<constructor-arg index="0" ref="dataSource"/>
</bean>
<!--
<bean name="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter"
lazy-init="false" depends-on="mbeanServer">
<property name="server" ref="mbeanServer"></property>
<property name="namingStrategy">
<bean class="org.springframework.jmx.export.naming.KeyNamingStrategy">
</bean>
</property>
<property name="beans">
<map>
<entry key="com.exp.pool.connection:type=c3p0,name=Main" value-ref="dataSource_c3">
</entry>
</map>
</property>
<property name="assembler" >
<bean class="org.springframework.jmx.export.assembler.MethodExclusionMBeanInfoAssembler">
<property name="ignoredMethods">
<value>
close,
getConnection,
getLastAcquisitionFailure,
getLastCheckinFailure,
getLastCheckoutFailure,
getLastIdleTestFailure,
getLastConnectionTestFailure,
getConnectionPoolDataSource,
getNestedDataSource,
getReference,
getConnection,
getPassword,
getPooledConnection,
getProperties,
getLogWriter,
getLastAcquisitionFailureDefaultUser,
getLastCheckoutFailureDefaultUser,
getLastCheckinFailureDefaultUser,
getLastIdleTestFailureDefaultUser,
getLastConnectionTestFailureDefaultUser,
setPassword,
setProperties,
setLogWriter
isWrapperFor
unwrap,
equals,
doResolve,
removeVetoableChangeListener,
addVetoableChangeListener,
removePropertyChangeListener,
addPropertyChangeListener,
setIdentityToken,
setDataSourceName,
getIdentityToken,
setConnectionPoolDataSource,
</value>
</property>
</bean>
</property>
</bean>
SpringBaseEntityManagerFactoryProvider provider = new SpringBaseEntityManagerFactoryProvider();
EntityManagerFactory emf = provider.getEntityManagerFactory();
JpaTransactionManager txManager = new JpaTransactionManager(emf);
Map<String, Object> jpaProperties = new HashMap<>();
jpaProperties.put("org.hibernate.flushMode", "COMMIT");
txManager.setJpaPropertyMap(jpaProperties);
DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
def.setName("LogTransaction");
org.springframework.transaction.TransactionStatus transactionStatus = txManager.getTransaction(def); try { ...
txManager.commit(transactionStatus);
i expected to use 1 connection to db for a transaction and close it after commit but after update to spring 5 it use 7 connections for 1 transaction and wont close it before 30 min