【问题标题】:Set hashmap in JobParameter in spring boot在 Spring Boot 中的 JobParameter 中设置 hashmap
【发布时间】:2022-01-17 10:36:24
【问题描述】:

我正在从数据创建 excel 文件,因为我已经创建了工作。我想将 hashmap 设置为作业参数,以便我可以在 MyReader 类中使用它,我创建了 CustomJobParameter 类。

您可以找到以下代码来获取作业参数:

  • 获取作业参数:

     public JobParameters createJobParam (MyRequest request) {
    
         final JobParameters parameters = new JobParametersBuilder()
             .addString("MyParam1", request.getReportGenerationJobId())
             .addString("MyParam2", request.getSessionId())
             .addLong("time", System.currentTimeMillis())
             .addParameter(
                 "MyObject",
                 new MyUtils.CustomJobParameter(request.getHsSlideArticles())
             )
             .toJobParameters();
         return JobParameters;
       }
    
  • CustomJobParameter 类写在 MyUtils 类中:

     public static class CustomJobParameter<T extends Serializable> extends JobParameter {
    
             private HashMap customParam;
    
    
             public CustomJobParameter (HashMap slideArticles) {
    
               super("");
               this.customParam = customParam;
             }
    
    
             public HashMap getValue () {
    
               return customParam;
             }
           }
    

但是当我使用自定义参数进行设置时,它设置的是空白字符串,而不是我传递的对象。

如何将 hashmap 传递给我的阅读器。

【问题讨论】:

    标签: spring-boot spring-batch jobs


    【解决方案1】:

    根据 JobParameter 的文档,JobParameter 只能是 String、Long、Date 和 Double。

    https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/core/JobParameter.html

    批处理作业参数的域表示。 Only the following types can be parameters: String, Long, Date, and Double. 标识标志用于指示参数是否为 用作作业实例标识的一部分。

    因此,您不能扩展 JobParameter 并期望它与 HashMap 一起使用。


    但是还有另一个选项,JobParameters

    https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/core/JobParameters.html

    https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/core/JobParametersBuilder.html

    您可以改为创建Map&lt;String, JobParameter&gt;

    例子:

    new JobParameters(Maps.newHashMap("yearMonth", new JobParameter("2021-07")))
    

    然后在您的createJobParam 中使用JobParametersBuilder addJobParameters 来简单地添加您所有的Map&lt;String, JobParameter&gt; 记录:

    addJobParameters(JobParameters jobParameters)  //Copy job parameters into the current state.
    

    所以你的方法看起来像:

    public JobParameters createJobParam (MyRequest request) {
    
         final JobParameters parameters = new JobParametersBuilder()
             .addString("MyParam1", request.getReportGenerationJobId())
             .addString("MyParam2", request.getSessionId())
             .addLong("time", System.currentTimeMillis())
             .addParameters(mayHashMapThatHas<String,JobParameter>)
             .toJobParameters();
         
              return JobParameters;
       }
    

    【讨论】:

    • 当我去jobRepository.createJobExecution(excelDownload.getName(), parameters);它抛出错误:jparepository org.postgresql.util.PSQLException: ERROR: value too long for type character varying(250)
    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2016-08-15
    • 2018-09-01
    • 2014-11-01
    • 2020-08-21
    相关资源
    最近更新 更多