【发布时间】:2020-12-13 12:18:27
【问题描述】:
到目前为止,我一直在使用带有 Spring Batch 的内存 H2 DB。但是,现在我切换到连接到外部 postgres 数据库。这是我的连接对象(有些混淆):
@Bean
public DataSource postgresDatasource() {
DriverManagerDataSource datasource = new DriverManagerDataSource();
datasource.setDriverClassName("org.postgresql.Driver");
datasource.setUrl("jdbc:postgresql://x.x.x.x:xxxx/blah");
datasource.setUsername("Joe");
datasource.setPassword("password");
return datasource;
}
当我启动我的应用程序时,我得到:
引起:org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;错误的 SQL 语法 [SELECT JOB_INSTANCE_ID, JOB_NAME 来自 BATCH_JOB_INSTANCE,其中 JOB_NAME = ?和 JOB_KEY = ?]; 嵌套异常是 org.postgresql.util.PSQLException:错误:关系 “batch_job_instance”不存在
然后我读到 Spring Batch 使用数据库为其恢复/重试功能保存元数据,并且对于嵌入式数据库,这些是 Spring Batch 默认设置的表。好的,这就解释了为什么我以前从未见过这个错误。
但是,它说我可以设置这个属性:
spring.batch.initialize-schema=never
所以我把它放在我的 application.properties 文件中。但是,我仍然收到错误消息。如果有任何想法,我将不胜感激。
【问题讨论】:
-
@MahmoudBenHassine ,我能够做一些非常相似的事情。尽管您的链接本质上是相同的方法,但我最终还是自己用更完整的解决方案回答了这个问题,以防将来有人可能会发现这些细节对他们自己的问题有帮助。
标签: java postgresql spring-batch