我有一个很奇怪的问题。我需要说的是,我的代码在本地运行得很好,但没有在我们的pod(k8环境)中保存一些数据。
在此批处理中,我有不同的数据源可供使用。一切正常。Job Repository基于地图,并使用ResourcelessTransactionManager
@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {
    @Override
    public void setDataSource(DataSource dataSource){
    }
}
我还使用不同的平台transactionmanager,然后使用springbatch(问题)。所以我在财产中将spring-allow-bean覆盖设置为true。我的配置器中的平台事务管理器是右绑定的,我调试了它。
我的一个步骤是定制作家。更新多个dbs中的多个表中的记录(简而言之,不同的数据源)
public class MyWriter implements ItemWriter<MyDTO> {
    @Autowired
    private MyFirstRepo myfirstRepo; //table in first datasource
    @Autowired
    private MySecondRepo mySecondRepo; //table in second datasource
    
    
        @Override
        public void write(List<? extends MyDTO> myDtoList) throws Exception {
         //some logic
         mySecondRepo.delete(deletableEntity)
         //some logic
         mySecondRepo.saveAll(updatableEntities)
         //some logic
         myfirstRepo.saveAll(updatableEntities)
        }
    
    }
由于我有多个数据源,所以我定义了多个事务管理器,为了将事务管理器赋予我的步骤,我定义了包含这些管理器的链式事务管理器。
    @Bean
    public Step myStep(@Qualifier("chainedTransactionManager") ChainedTransactionManager chainedTransactionManager) {
 
        return getCommonStepBuilder("myStep")
                .transactionManager(chainedTransactionManager)
                .<MyDTO,MyDTO>chunk(200)
                .reader(myPaginingReader())
                .writer(myWriter)
                .taskExecutor(myTaskExecutor())
                .throttleLimit(15)
                .build();
    }
链式事务管理器配置(这两个事务管理器都是JpaTransactionManager):
@Configuration
public class TransactionManagerConfig {
    @Primary
    @Bean(name = "chainedTransactionManager")
    public ChainedTransactionManager transactionManager(
            @Qualifier("firstTransactionManager") PlatformTransactionManager firstTransactionManager,
            @Qualifier("secondTransactionManager")PlatformTransactionManager secondTransactionManager) {
        return new ChainedTransactionManager(firstTransactionManager,secondTransactionManager);
    }
}
因此,我在writer中的前两个jpa操作工作正常(对MyFirstRepo进行的操作),但最后一个操作不是将数据持久化到db。它不会抛出任何错误,作业成功完成,但不会更新表中的记录。
我必须提到第二次,它确实在我的本地更新。只是没有在我们的k8环境(码头化微服务)应用程序中更新。这让它变得如此令人困惑。知道为什么会这样吗?