我创建了一个 Spring Batch 来查询 Azure SQL Server 数据库并将数据写入 CSV 文件。我没有数据库的创建
权限。我在运行批处理时收到此错误Invalid Object name BATCH_JOB_INSTANCE
。我不想在主数据库中创建 Spring Batch 元数据表。或者,如果我可以将它们放在另一个本地或内存数据库(例如 h2db)中,那将会很有帮助。
我还添加了 spring-batch-initialize-schema=never
,这里类似问题的大多数答案都是这种情况,但这没有帮助。
编辑:
我通过扩展 DefaultBatchConfigurer
类并覆盖 setDataSource
来阻止在主数据库中创建元数据表,从而解决了无效对象名称
错误code> 方法,从而在内存中的映射存储库中创建它们。现在我想尝试两种选择:
- 如何在本地数据库或内存数据库(如 h2db)中创建元数据表。
- 或者,如果我已经在主数据库中创建了元数据表,其架构与我从中获取的主表不同。如何将我的作业指向另一个架构中的元数据表,以在其中存储作业和步骤详细信息数据。
@Configuration
public class SpringBatchConfig extends DefaultBatchConfigurer{
@Override
public void setDataSource(DataSource datasource) {
}
...
我的 application.properties 文件如下所示:
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring-batch-initialize-schema=never
spring.batch.job.enabled=false
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
最佳答案
How to have the meta data tables to be created in a local db or in-memory db like h2db.
您可以使用spring.batch.initialize-schema=embedded
来实现这一点。
Or If I have the meta data tables created already in the main database, in a different schema than my main table I'm fetching from. How to point my job to those meta-data tables in another schema, to store the job and step details data in those.
Spring Batch 适用于数据源,而不是特定的模式。如果元数据表位于不同的架构中,那么您需要创建指向该架构的第二个数据源并将其设置在作业存储库中。
关于sql-server - Spring 批处理 "Invalid object name BATCH_JOB_INSTANCE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64094079/