spring jdbc hikari连接池-不断登录和注销数据库

时间:2019-09-17 14:16:13

标签: spring-boot spring-data-jpa hikaricp

我正在使用Spring Boot数据jpa来连接到Oracle数据库。
 Spring uses HikariCP用于JDBC连接,默认情况下creates a fixed connection pool of size 10

问题是在Oracle数据库日志中它显示我的应用程序不断从数据库登录和注销。即几乎每秒钟都有一个登录和注销请求。

Extract from the oracle log which shows constant logging on / off

其中90%的登录/关闭发生在没有用户与应用交互的情况下,这就是为什么我很困惑的原因。这是一个问题,因为它会在数据库上产生大量开销。

这是我为连接设置bean的方式:

@Repository
@Transactional(readOnly = true)
public interface OracleDao extends CrudRepository<MyOracleResource, Long> {

}

以下是与数据源相关的application.properties

spring.datasource.platform=prod
spring.jpa.database=Oracle
spring.jpa.hibernate.ddl-auto=none
spring.datasource.initialization-mode=never
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.jpa.show-sql=true
spring.datasource.url=jdbc:oracle:thin:@hostdetails...
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.properties.hibernate.default_schema=schema_dbo
spring.datasource.continue-on-error=false

最后是pom文件中的条目:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
    <relativePath/>
</parent>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用idleTimeout and minimumIdle

更改空闲连接设置
  

idleTimeout   此属性控制允许连接在池中保持空闲状态的最长时间。仅当minimumIdle定义为小于maximumPoolSize时,此设置才适用。一旦池达到MinimumIdle连接,空闲连接将不会退出。连接是否以空闲状态退役,最大变化为+30秒,平均变化为+15秒。在此超时之前,连接永远不会因为闲置而退役。值为0表示永远不会从池中删除空闲连接。最小允许值为10000ms(10秒)。默认值:600000(10分钟)

如果闲置时间长,基本上减少minimumIdle并增加idleTimeout

如果您的活动总是很低,请考虑将maximumPoolSize属性的默认值减少10