【发布时间】:2020-03-13 23:44:11
【问题描述】:
我有一个 Spring Batch 应用程序,它每 10 分钟运行一次。它从 REST API 获取一些数据,然后将这些数据保存在数据库中。
那么,我现在的问题在哪里?
有时数据库 (Oracle) 可能会重新启动或离线(真的不知道)。但是应用程序似乎没有重新连接到数据库。它只是停留在空闲模式。
Spring Boot:2.1.2.RELEASE
application.yml 看起来像这样:
app:
database:
jdbc-url: jdbc:oracle:thin:@<host>:<port>:<db>
username: <username>
password: <password>
driver-class-name: oracle.jdbc.OracleDriver
options:
show-sql: true
ddl-auto: none
dialect: org.hibernate.dialect.Oracle12cDialect
然后,我像这样配置 DataSource:
public DataSource dataSource() {
HikariConfig configuration = new HikariConfig();
configuration.setJdbcUrl(properties.getJdbcUrl());
configuration.setUsername(properties.getUsername());
configuration.setPassword(properties.getPassword());
configuration.setDriverClassName(properties.getDriverClassName());
configuration.setLeakDetectionThreshold(60 * 1000);
return new HikariDataSource(configuration);
}
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan("xxx.xxx.xx");
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
Properties additionalProperties = properties();
em.setJpaProperties(additionalProperties);
return em;
}
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
return new JpaTransactionManager(emf);
}
private Properties properties() {
Properties additionalProperties = new Properties();
additionalProperties.setProperty("hibernate.hbm2ddl.auto", properties.getOptions().getDdlAuto());
additionalProperties.setProperty("hibernate.dialect", properties.getOptions().getDialect());
additionalProperties.setProperty("hibernate.show_sql", properties.getOptions().getShowSql());
return additionalProperties;
}
老实说,我不确定我是否在配置中做错了什么。
谢谢!
【问题讨论】:
-
您没有多个数据库实例,因此数据库将始终/大部分时间都在运行吗?
-
多个数据库实例是什么意思?数据库不是由我管理的,据我所知,只有一个数据库实例。
-
启用空闲连接检查,并启用彼此不同的最小值和最大值。
-
通常,我们有多个数据库实例在 Oracle RAC 中运行。这是为了高可用性。请通过docs.oracle.com/database/121/HABPT/config_fcf.htm#HABPT5381链接。
-
@M.Deinum 如何启用空闲连接检查? min 和 max 你的意思可能是 minimumIdle 和 maximumPoolSize? (我指的是Hikari's docu)
标签: oracle hibernate spring-boot spring-batch hikaricp