grails - JobRepository中检测到的现有事务-带有Grails插件的Spring Batch

标签 grails spring-batch

每次启动批处理作业时,它都会引发IllegalStateException并说它在JobRepository中检测到事务。我做了一些研究,并删除了代码中的所有@Transactional注释。

我使用Grails Spring Batch插件,可以找到here,并且使用Grails 2.3.11和Java8。我的代码如下所示:

SimpleJobBatchConfig.groovy

beans {

    xmlns batch:"http://www.springframework.org/schema/batch"

    batch.job(id: 'simpleJob') {
        batch.step(id: 'printStep') {
            batch.tasklet(ref: 'printHelloWorld')
        }
    }

    printHelloWorld(SimpleJobTasklet) { bean ->
        bean.autowire = 'byName'
    }

}

BatchTestController.groovy
class BatchelorController {

    def batchTestService

    def index() {

    }

    def launchSimpleJob() {
        batchTestService.launchSimpleJob()
    } 
}

BatchTestService.groovy
class BatchTestService {

    def springBatchService

    def launchSimpleJob() {
        springBatchService.launch("simpleJob")
    }

}

SimpleJobTasklet.groovy
class SimpleJobTasklet implements Tasklet {

    @Override
    RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
        println("Hello World!")
        return RepeatStatus.FINISHED
    }

}

最佳答案

默认情况下,Grails服务是事务性的。您可以使用@Transactional自定义整个类或每个方法的设置,但如果没有注释,则与具有类作用域的Spring @Transactional注释相同。

要使您的服务不可交易,请添加static transactional = false,例如

class BatchTestService {

    static transactional = false

    def springBatchService

    ...
    }
}

关于grails - JobRepository中检测到的现有事务-带有Grails插件的Spring Batch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32308793/

相关文章:

grails - Grails 创建的 War 忽略图像文件

grails - Grails 3命令行的命令源代码

java - JSON 数据限制

java - 如何使用ItemWriter执行mysql LOAD DATA INFILE?

java - 如何在 Itemwriter 中格式化输出日期?

java - 作业的运行资格与 JobLauncherTestUtils 不起作用

java - Spring 批处理 : Multiple Item Readers in a single step

spring - Grails 3.0.11 AOP 注释在 Controller 方法之前预处理命令对象

grails - Grails日期被接受为字符串

spring - Spring Batch "default"上下文变量是什么?