#java #spring #hibernate #spring-transactions
Вопрос:
У меня есть старый проект, в котором используются Spring (3.2.1.РЕЛИЗ) и hibernate-core (3.6.10.Финал). В принципе, мне нужно установить время ожидания, когда выполнение любого запроса занимает более 30 секунд.
Пожалуйста, найдите ниже мою существующую конфигурацию пружины:
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"gt; lt;!-- Hibernate Transaction Manager --gt; lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"gt; lt;property name="sessionFactory" ref="sessionFactory"/gt; lt;/beangt; lt;jee:jndi-lookup id="dataSource" jndi-name="${jndi.x.name}"gt;lt;/jee:jndi-lookupgt; lt;jee:jndi-lookup id="dataSourceConfig" jndi-name="${jndi.y.name}"gt;lt;/jee:jndi-lookupgt; lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"gt; lt;property name="dataSource" ref="dataSource"/gt; lt;property name="hibernateProperties"gt; lt;propsgt; lt;prop key="hibernate.dialect"gt;org.hibernate.dialect.MySQLDialectlt;/propgt; lt;prop key="hibernate.format_sql"gt;falselt;/propgt; lt;prop key="hibernate.show_sql"gt;falselt;/propgt; lt;prop key="hibernate.globally_quoted_identifiers"gt;truelt;/propgt; lt;prop key="hibernate.connection.CharSet"gt;utf8lt;/propgt; lt;prop key="hibernate.connection.characterEncoding"gt;utf8lt;/propgt; lt;prop key="hibernate.connection.useUnicode"gt;falselt;/propgt; lt;/propsgt; lt;/propertygt; lt;/beangt; lt;!-- configure hibernate session factory for Local database --gt; lt;bean id="sessionFactoryConfig" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"gt; lt;property name="dataSource" ref="dataSourceConfig"/gt; lt;property name="configLocations"gt; lt;listgt; lt;valuegt;classpath:hibernate.cfg.xmllt;/valuegt; lt;/listgt; lt;/propertygt; lt;property name="hibernateProperties"gt; lt;propsgt; lt;prop key="hibernate.dialect"gt;org.hibernate.dialect.MySQLDialectlt;/propgt; lt;!-- lt;prop key="hibernate.dialect"gt;org.hibernate.dialect.Oracle10gDialectlt;/propgt; --gt; lt;prop key="hibernate.format_sql"gt;truelt;/propgt; lt;prop key="hibernate.show_sql"gt;falselt;/propgt; lt;prop key="hibernate.globally_quoted_identifiers"gt;truelt;/propgt; lt;prop key="hibernate.connection.CharSet"gt;utf8lt;/propgt; lt;prop key="hibernate.connection.characterEncoding"gt;utf8lt;/propgt; lt;prop key="hibernate.connection.useUnicode"gt;falselt;/propgt; lt;/propsgt; lt;/propertygt; lt;/beangt; lt;/beansgt;
Мой hibernate.cfg.xml находится ниже:
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"gt; lt;hibernate-configurationgt; lt;session-factory name="sessionFactoryConfig"gt; lt;!-- Please keep this in alphabetical order (ascending) --gt; lt;mapping resource="mappings/named_queries.xml" /gt; lt;mapping class="dummy.test" /gt; lt;mapping class="dummy.test2" /gt; lt;/session-factorygt; lt;/hibernate-configurationgt;
Я видел следующую конфигурацию:
hibernate.c3p0.timeout
Но, основываясь на том, что я прочитал, он удалит неиспользуемое соединение в пуле, если время ожидания активного сеанса не превышает 30 секунд.
Есть идеи, как я могу реализовать функцию глобального тайм-аута?
Ответ №1:
Конфигурация гибернации предназначена для настройки тайм-аута запроса.:
javax.persistence.query.timeout
При использовании свойств приложения Springboot:
spring.jpa.properties.javax.persistence.query.timeout=123