我正在使用Spring Boot数据jpa来连接到Oracle数据库。
Spring uses HikariCP用于JDBC连接,默认情况下creates a fixed connection pool of size 10。
问题是在Oracle数据库日志中它显示我的应用程序不断从数据库登录和注销。即几乎每秒钟都有一个登录和注销请求。
其中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>
感谢您的帮助!
答案 0 :(得分:0)
您可以使用idleTimeout and minimumIdle
更改空闲连接设置idleTimeout 此属性控制允许连接在池中保持空闲状态的最长时间。仅当minimumIdle定义为小于maximumPoolSize时,此设置才适用。一旦池达到MinimumIdle连接,空闲连接将不会退出。连接是否以空闲状态退役,最大变化为+30秒,平均变化为+15秒。在此超时之前,连接永远不会因为闲置而退役。值为0表示永远不会从池中删除空闲连接。最小允许值为10000ms(10秒)。默认值:600000(10分钟)
如果闲置时间长,基本上减少minimumIdle
并增加idleTimeout
如果您的活动总是很低,请考虑将maximumPoolSize
属性的默认值减少10