Как установить тайм-аут сеанса

#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