Я работаю над приложением Spring-MVC, в котором мы используем Hibernate и c3p0 для транзакций базы данных и пула соединений. Большую часть времени он работает очень хорошо, никаких проблем. Но в определенных ситуациях мне приходится копировать множество объектов и файлов в текущей транзакции. Когда это происходит, весь сервер замедляется, и, наконец, я начинаю получать could not rollback exception
. Что-то не так с моими настройками c3p0? Спасибо.
пом.xml:
<!--- Hibernate dependencies -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.9.Final</version>
</dependency>
корень-контекст.xml :
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<beans:property name="driverClassName" value="org.postgresql.Driver"/>
<beans:property name="url"
value="jdbc:postgresql://localhost:PORT/DB_NAME"/>
<beans:property name="username" value="USERNAME"/>
<beans:property name="password" value="PASSWORD"/>
<beans:property name="removeAbandoned" value="true"/>
<beans:property name="removeAbandonedTimeout" value="20"/>
<beans:property name="defaultAutoCommit" value="false"/>
</beans:bean>
<!-- Hibernate 4 SessionFactory Bean definition -->
<beans:bean id="hibernate4AnnotatedSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="packagesToScan" value="com.ourapp.spring.model"/>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</beans:prop>
<beans:prop key="hibernate.show_sql">false</beans:prop>
<!--<beans:prop key="hibernate.jdbc.batch_size">1000</beans:prop>-->
<beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
<beans:prop key="cache.use_second_level_cache">true</beans:prop>
<beans:prop key="cache.use_query_cache">true</beans:prop>
<beans:prop key="hibernate.order_updates">true</beans:prop>
<beans:prop key="show_sql">false</beans:prop>
<beans:prop key="hibernate.c3p0.min_size">1</beans:prop>
<beans:prop key="hibernate.c3p0.max_size">750</beans:prop>
<beans:prop key="hibernate.c3p0.acquire_increment">1</beans:prop>
<beans:prop key="hibernate.c3p0.idle_test_period">1000</beans:prop>
<beans:prop key="hibernate.c3p0.max_statements">150</beans:prop>
<beans:prop key="hibernate.c3p0.timeout">1200</beans:prop>
<beans:prop key="hibernate.connection.release_mode">auto</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
Спасибо.
top
не очень подходит для профилирования процесса Java. Хотя вы можете заметить, что реальных утечек памяти нет, вы ничего не знаете о шаблонах использования памяти. - person Kayaman   schedule 10.04.2018top
для мониторинга процесса Java. - person Kayaman   schedule 10.04.2018DataSource
вLocalSessionFactoryBean
, в основном делая все свойстваhibernate.c3p0
и другие параметры, связанные с подключением, в этом отношении бесполезными (как и должно быть, поскольку вы настроили внешний источник данных, как это рекомендуется Hibernate и многими другими ресурсами). - person M. Deinum   schedule 10.04.2018DataSource
, а в том, как обрабатывается большой объем данных. Как правило, при обработке больших объемов данных вы хотите периодическиflush
иclear
кэшировать первый уровень, иначе это в конечном итоге все замедлит. - person M. Deinum   schedule 10.04.2018flush
после каждой записи (так как это замедлит работу вашего приложения). Звоните после разумных пакетов (желательно таких же, как вы указали в настройках пакета гибернации), например, 50 или 100. - person M. Deinum   schedule 10.04.2018