如何在作业中输入参数

时间:2019-02-11 09:50:23

标签: java spring spring-boot spring-batch

我正在尝试通过控制台输入特定的参数以使作业运行,如下所示:

getBitmapTimeTaken += measureTimeMillis {
    bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, uri)
}

输入参数是inputFileName,其定义为“ ficheroEntrada.csv”,如下所示: https://imgur.com/m2jVoEB

但是我收到此错误:

@Value("#{jobParameters['inputFileName']}")
public void setFileName(final String name) {
    inputFileName = name;
}

我是春季补习界的新手,我真的不知道自己在做什么错...

谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

要绑定作业参数,您需要将late binding功能与StepScope结合使用。

您需要做的是制作将您的setter定义为逐步作用域的bean。在您的情况下,执行此操作的一种典型方法是将项目读取器声明为Bean,并按如下所示传递job参数:

@Bean
@StepScope
public FlatFileItemReader flatFileItemReader(@Value("#{jobParameters['inputFileName']}") String name) {
   return new FlatFileItemReaderBuilder<Foo>()
               .name("flatFileItemReader")
               .resource(new FileSystemResource(name))
               // set other properties on the reader
}

答案 1 :(得分:0)

使用Spring,您应该能够使用;WITH cte AS (SELECT no_test, Sum(CASE WHEN quest_cat LIKE 'Type I-%' THEN 1 ELSE 0 END) AS count_quest_I, Sum(CASE WHEN quest_cat LIKE 'Type II-%' THEN 1 ELSE 0 END) AS count_quest_II, Sum(CASE WHEN quest_cat LIKE 'Type III-%' THEN 1 ELSE 0 END) AS count_quest_III FROM result GROUP BY no_test) INSERT INTO combine_table SELECT t1.no_test, t1.NAME, count_quest_i, count_quest_ii, count_quest_iii FROM m_peserta t1 INNER JOIN cte r ON r.no_test = t1.no_test 语法和@Value注释来保留命令行参数。

${}

显然,public void setFileName(@Value("${inputFileName}") final String name) { inputFileName = name; } 注释适用于由Spring上下文(Bean)管理(有时是代理)的对象。