最近私はすべてのSpring 4プロジェクトを最新のSpring Boot Starter Frameworkで再構築しました。Spring Boot - PoolExhaustedException
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
</parent>
私のすべての再構築プロジェクトでPoolExhaustedExceptionがランダムに発生していることを除いて、これまでのところすべて正常に動作しています。
正確な例外がある:
org.apache.tomcat.jdbc.pool.PoolExhaustedException: [http-nio-8080-exec-4] Timeout: Pool empty. Unable to fetch a connection in 20 seconds, none available[size:50; busy:50; idle:0; lastwait:20000].
私が受け取った最後の例外が私のデータベースから文書をダウンロードしているコントローラからだった:
@RequestMapping(value = "/getDocument/{value}/{text}", method = RequestMethod.GET)
public void get(HttpServletResponse response, @PathVariable String value, @PathVariable String text){
try {
Document ufile = documentService.getDocumentByID(Integer.parseInt(value));
response.setContentType(ufile.getType());
response.setContentLength(ufile.getContent().length);
FileCopyUtils.copy(ufile.getContent(), response.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
サービス:
@Transactional
public Document getDocumentByID(int id) {
Document r = this.documentDAO.getDocumentByID(id);
return r;
}
DAO:
@Transactional
public Document getDocumentByID(int id)
{
Session session = this.sessionFactory.getCurrentSession();
Document p = (Document) session.load(Document.class, new Integer(id));
return p;
}
@Transactionalで一時的に問題を解決したコントローラに注釈を付けようとしましたが、他のトランザクションエラーが発生して削除する必要がありました。
私はproject.propertiesも100を超えてプールを増やそうとしましたが、これは問題を遅らせるだけでしたが解決しませんでした。
project.properties
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.id.new_generator_mappings = false
spring.jpa.properties.hibernate.format_sql = true
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
私の主な問題は、tomcatまたは休止状態で、私のautowiredセッションを正しく閉じていないと思いますが、私はそれをチェックします。 – zFr3eak