我正在使用Spring Boot数据jpa来连接到Oracle数据库。
Spring使用HikariCP进行JDBC连接,默认情况下会创建大小为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>
谢谢您的帮助!
您可以使用idleTimeout和minimumIdle更改空闲连接设置
idleTimeout此属性控制允许连接在池中处于空闲状态的最长时间。仅当minimumIdle定义为小于maximumPoolSize时,此设置才适用。一旦池达到MinimumIdle连接,空闲连接将不被取消。连接是否以空闲状态退役,最大变化为+30秒,平均变化为+15秒。在此超时之前,连接永远不会因为闲置而退役。值为0表示永远不会从池中删除空闲连接。最小允许值为10000ms(10秒)。默认值:600000(10分钟)
基本上,如果闲置时间长,则减少minimumIdle
和增加idleTimeout
另外,如果您的活动总是很少,请考虑将maximumPoolSize
属性从其默认值10减少
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句