我最近开始进行groovy测试,以测试使用一个步骤(ItemReader、ItemProcessor、ItemWriter)的spring批处理作业
知道我正在使用h2内存数据库,我已尝试通过单元测试启动作业,但无法验证作业是否已完成:
def 'test launch job'() {
given:
def projectId = 1234L
def fileType = FileType.TEST
def sourceId = 1234506L
def enteredBy = 'groovy_unit_test'
def prePlanYear = 2022L
when:
JobParametersBuilder builder = new JobParametersBuilder();
builder.addLong("projectId", projectId)
.addString("fileType", fileType.toString())
.addLong("sourceId", sourceId)
.addString("enteredBy", enteredBy)
.addLong("prePlanYear", prePlanYear)
//JobExecution jobExecution = jobLauncher.launchJob( builder.toJobParameters())
JobExecution jobExecution = jobLauncher.launchStep(JobConstants.StepNames.xwalkMappingStep.name(), builder.toJobParameters())
then: 'Job completes with no errors.'
jobExecution.status == BatchStatus.COMPLETED
//jobExecution.exitStatus == ExitStatus.COMPLETED
}
此外,当我试图调试它时,它不会从一端到另一端,而是在测试完成后在ItemReader中停止。我知道这不是等待工作完成。
有没有办法在工作完成后才完成测试?
@PropertySource('classpath:application.properties')
@ActiveProfiles('test')
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = ["spring.h2.console.enabled=true"])
@ImportAutoConfiguration([ FeignAutoConfiguration.class])
@Import([TestConfig.class])
class BaseSpec extends Specification{
@PersistenceContext
EntityManager entityManager
@Autowired
JobRepository jobRepository
@Autowired
DataSource dataSource
@Autowired
JpaTransactionManager jpaTransactionManager
@Autowired
JobLauncherTestUtils jobLauncher
}
@Configuration
@EnableBatchProcessing
class TestConfig {
}
非常感谢。
这是因为您没有运行整个作业,而只是在这里执行其步骤:
JobExecution jobExecution = jobLauncher.launchStep(JobConstants.StepNames.xwalkMappingStep.name(), builder.toJobParameters())
您应该使用JobLauncher#launchJob
运行作业,而不仅仅是步骤。
我需要从远程SFTP服务器下载一个文件,并使用spring batch处理它们。我已经实现了使用Spring集成下载文件的代码。但我无法从Spring集成组件启动Spring批处理作业。我有以下代码: 但这不起作用(上一个方法中的错误),因为找不到文件类型的bean。我不能把这两部分连在一起。如何连接集成和批处理?
我不确定我是否能清楚地解释我的情况。请建议您对spring-batch作业测试E2E流是否有其他更好的意见,以及您是否可以对上述方法提供任何清晰的说明,这将是有帮助的。
布尔沙赫布尔
我有一个正在工作的Spring Boot/批处理项目,包含2个作业。 我现在尝试添加集成,仅使用java配置/java DSL从远程SFTP轮询文件,然后启动作业。 文件轮询工作正常,但我不知道如何在我的流中启动作业,尽管阅读了以下链接: 一些代码段: 对于.handle(“FileMessageToJobRequest”,“ToRequest”),我使用的是http://docs.spring.
是否可以配置Spring批处理管理员来启动主作业和从作业。我们有一个进程作为主节点和3-4个从节点。 Spring batch admin在单独的JVM进程中运行,但所有Spring批处理作业都使用相同的批处理数据库模式。
我有一个spring批处理作业,从CSV文件读取并写入数据库。我想让它重新启动。例如,如果在读取文件或写入db时出现异常,导致作业失败,则应从失败的同一点/块重新开始,而不是从头开始读取整个文件。 我正在从一个endpoint触发作业启动器,并在我的控制器中配置了它。 目前,我正在通过控制器将参数(这是一个唯一的标识符/数字)传递给作业参数,以运行新的作业实例。如果作业失败,我将使用与GET请求中