Spring batch 弹簧批次3.0.3 get“;使用非事务性存储引擎(如MyISAM)更新表;使用mysql 5.6

Spring batch 弹簧批次3.0.3 get“;使用非事务性存储引擎(如MyISAM)更新表;使用mysql 5.6,spring-batch,Spring Batch,我使用Grails2.4.4中的SpringBatch 3.0.3.RELEASE 我在执行下面的代码时发现异常 “当@@GLOBAL.ENFORCE_GTID_CONSISTENCY=1时,对非事务表的更新只能在自动提交语句或单语句事务中进行,而不能与对事务表的更新在同一语句中进行。” 代码是 List<Flow> flowList = Lists.newArrayList() Shop.findAllByCityIdAndTypeAndStatus(cityId, 1

我使用Grails2.4.4中的SpringBatch 3.0.3.RELEASE

我在执行下面的代码时发现异常

“当@@GLOBAL.ENFORCE_GTID_CONSISTENCY=1时,对非事务表的更新只能在自动提交语句或单语句事务中进行,而不能与对事务表的更新在同一语句中进行。”

代码是

List<Flow> flowList = Lists.newArrayList()

    Shop.findAllByCityIdAndTypeAndStatus(cityId, 1 as byte, 1 as byte).each {
        Shop stationShop ->

            TaskletStep taskletStep = stepBuilderFactory.get("copy_city_item_to_station").tasklet(new Tasklet() {
                @Override
                RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
                    copyCityItemToStationItem(item, stationShop)
                    return RepeatStatus.FINISHED
                }
            }).build()

            Flow flow = new FlowBuilder<Flow>("subflow").from(taskletStep).end();

            flowList.add(flow)
    }


    Flow splitFlow = new FlowBuilder<Flow>("split_city_item_to_station").split(eventTaskExecutor).add(flowList.toArray(new Flow[0])).build();

    FlowJobBuilder builder = jobBuilderFactory.get("push_item_to_all_station").start(splitFlow).end();

    Job job = builder.preventRestart().build()

    jobLauncher.run(job, new JobParametersBuilder().addLong("city.item.id", item.id).toJobParameters())
List flowList=Lists.newArrayList()
Shop.findallbycityandtypeandstatus(cityId,1为字节,1为字节)。每个{
购物站商店->
TaskletStep TaskletStep=stepBuilderFactory.get(“复制城市项目到站点”).tasklet(新tasklet(){
@凌驾
RepeatStatus执行(StepContribution贡献,ChunkContext ChunkContext)引发异常{
copyCityItemToStationItem(项目,stationShop)
返回RepeatStatus.FINISHED
}
}).build()
Flow Flow=新的FlowBuilder(“子流”)。来自(taskletStep).end();
流列表。添加(流)
}
Flow splitFlow=新建FlowBuilder(“拆分城市项目到站点”).split(eventTaskExecutor).添加(flowList.toArray(新流[0]).build();
FlowJobBuilder=jobBuilderFactory.get(“将项目推送到所有站点”).start(splitFlow.end();
作业Job=builder.preventRestart().build()
jobLauncher.run(作业,新作业参数builder().addLong(“city.item.id”,item.id).toJobParameters())
谷歌说这个问题可能存在于“”中,所以我将文件“schema mysql.sql”中从MyISAM到InnoDB的所有引擎都替换了,它就工作了


现在我想知道我所做的是正确的还是错误的,我的方法中是否存在潜在的错误?

你所做的是正确的。这是SpringBatch为MySql生成的SQL文件中的一个错误。我已经在Jira中创建了一个问题,您可以在此处查看: