弹簧批处理元数据表的问题



我一直在尝试创建一个Spring批处理程序,该程序必须从数据库中读取某些数据并将其写入另一个表中。我不希望在数据库中创建 Spring 批处理元数据表。当我尝试这样做时,我无法进行交易。

我通过扩展DefaultBatchConfigurer并像这样覆盖来避免元数据表,

@Override
public void setDataSource(DataSource dataSource) {
// override to do not set datasource even if a datasource exist.
// initialize will use a Map based JobRepository (instead of database)
} 

通过这样做,我得到了org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exception is javax.persistence.TransactionRequiredException: no transaction is in progress例外。

有没有办法避免元数据表并仍然使用事务?

  1. 如果您使用的是 Spring 引导,则可以将以下行添加到 application.properties 或特定于环境的属性文件中,以确保不会创建 spring 批处理元数据表:

spring.batch.initializer.enabled=false

  1. 另外,由于您不需要元表,因此不要扩展DefaultBatchConfigurer类。

  2. 如果我想设置一个持久JobRepository即创建 spring batch 元表,我只会扩展这个类,为此我们需要DefaultBatchConfigurer类默认提供的许多其他配置。

最新更新