0

正如问题所暗示的那样,我正在 java.lang.NullPointerException尝试通过两个步骤运行批处理作业。其中一个步骤是一个简单的 tasklet,而另一个是基于块的。批处理作业当前正在通过 REST 端点运行(仅用于测试目的)。

这就是我所拥有的:

作业配置类

@Configuration
@EnableBatchProcessing
@Slf4j
public class DailyReportingQueryExecutorJobConfig
{
    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private QueryDetailsRepository queryRepo;

    @Autowired
    @Qualifier("reportingQueryReader")
    private RepositoryItemReader<QueryDetails> reportingQueryReader;

    @Autowired
    @Qualifier("reportingQueryProcessor")
    private ItemProcessor<QueryDetails, List<ReportingCounts>> reportingQueryProcessor;

    @Autowired
    @Qualifier("reportingQueryResultWriter")
    private ListUnpackingItemWriter<ReportingCounts> reportingQueryResultWriter;


    @Autowired
    private QueryScheduleService queryScheduleService;

    @Autowired
    private ReportingCountsRepository reportingCountsRepo;

    @Autowired
    @Qualifier("parallelTaskExecutor")
    private TaskExecutor taskExecutor;

    @Autowired
    @Qualifier("retrieveReportingQueriesForDayStep")
    private Step retrieveReportingQueriesForDayStep;

    @Autowired
    @Qualifier("identifyAndTrackQueriesToBeExecutedStep")
    private Step identifyAndTrackReportQueriesToExecuteStep;

    @Autowired
    @Qualifier("identifyAndTrackReportQueriesToExecuteTasklet")
    private IdentifyReportingQueriesTasklet identifyAndTrackReportQueriesToExecuteTasklet;

    @Bean(name = "reportingQueryParallelExecutorJob")
    @Autowired
    public Job dailyQueryExecutorJob(JobCompletionNotificationListener jobCompletionNotificationListener)
    {
        return jobBuilderFactory.get("ReportingQueryParallelExecutorJob")
                .incrementer(new RunIdIncrementer())
                .start(identifyAndTrackReportQueriesToExecuteStep)
                .next(retrieveReportingQueriesForDayStep)
                .listener(jobCompletionNotificationListener)
                .build();
    }



    @Bean(name = "identifyAndTrackQueriesToBeExecutedStep")
    public Step identifyAndTrackQueriesToBeExecutedStep()
    {
        return stepBuilderFactory
                .get("identifyAndTrackReportQueriesToExecuteStep") //identifyAndTrackQueriesToBeExecutedStep
                .tasklet(identifyAndTrackReportQueriesToExecuteTasklet)
                .build();

    }



    @Bean(name = "retrieveReportingQueriesForDayStep")
    public Step retrieveReportingQueriesForDayStep()
    {

        return stepBuilderFactory.get("RetrieveReportingQueriesForDayStep")
                .<QueryDetails, List<ReportingCounts>> chunk(1)
                .reader(reportingQueryReader)
                .processor(reportingQueryProcessor)
                .writer(reportingQueryResultWriter)
                .taskExecutor(taskExecutor)
                .allowStartIfComplete(true)
                .build();
    }

    @Bean(name = "reportingQueryReader")
    @StepScope
    public RepositoryItemReader<QueryDetails> reportingQueryReader(@Value("#{jobParameters[asOfDate]}") Date asOfDateParam)

    {
        log.info("Reporting reader invoked for asOfDate "+ asOfDateParam + " Date type: "+ asOfDateParam.getClass());
        Instant instant = asOfDateParam.toInstant();
        ZonedDateTime atZone = instant.atZone(ZoneId.systemDefault());
        LocalDate asOfDate = atZone.toLocalDate();
        List<Integer> queryIdsForDay = queryScheduleService.getQueryIdsForDay(asOfDate, QueryType.REPORT_QUERY);
        ArrayList<Object> argList = new ArrayList<>();
        argList.add(queryIdsForDay);
        log.info("List Of Queries for Day: " + argList.toString() );

        /*****************************************************************************************************/

        RepositoryItemReader<QueryDetails> repositoryItemReader = new RepositoryItemReader<>();
        Map<String, Direction> sort = new HashMap<>();
        sort.put("id", Direction.ASC);
        repositoryItemReader.setSort(sort);
        repositoryItemReader.setRepository(queryRepo);
        repositoryItemReader.setMethodName("findByIdIn");
        repositoryItemReader.setArguments(argList);
        log.info("Repository item reader successfully initialized" );
        return repositoryItemReader;
    }

    @Bean(name = "reportingQueryProcessor")
    @StepScope
    public ReportingQueryItemProcessor reportingQueryProcessor()
    {
        ReportingQueryItemProcessor queryItemProcessor = new ReportingQueryItemProcessor();
        return queryItemProcessor;
    }

    @Bean(name= "reportingQueryResultWriter")
    @StepScope
    public ListUnpackingItemWriter<ReportingCounts> reportingQueryResultWriter()
    {
        RepositoryItemWriter<ReportingCounts> repositoryItemWriter = new RepositoryItemWriter<>();
        repositoryItemWriter.setRepository(reportingCountsRepo);
        repositoryItemWriter.setMethodName("save");
        ListUnpackingItemWriter<ReportingCounts> listUnpackingItemWriter = new ListUnpackingItemWriter<ReportingCounts>();
        listUnpackingItemWriter.setDelegate(repositoryItemWriter);
        return listUnpackingItemWriter;

    }

}

小任务

import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.aspen.tools.entities.QueryType;
import com.aspen.tools.services.QueryScheduleService;

import lombok.extern.slf4j.Slf4j;


@Slf4j
@Component(value="identifyAndTrackReportQueriesToExecuteTasklet")
public class IdentifyReportingQueriesTasklet implements Tasklet
{

//  @Autowired
//  @Qualifier("jdbcQueryParameterValues")
//  private Map<String, Date> paramSource; 

    //@Autowired
    //private QueryScheduleService queryScheduleService;

//  @Value("#{jobParameters[queryType]}")
//  private String queryType; // reporting, exception, or notification please see the batch controller
//  
    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception
    {
        // TODO Auto-generated method stub
        System.out.println("hello world");

        //String queryType = chunkContext.getStepContext().getStepExecution()
                  //.getJobParameters().getString("queryType");


        //System.out.println(queryType);

        //Date asOfDateParam = paramSource.get("ASOFDATE");


//      log.info("Inside the tasklet");
//      Instant instant = asOfDateParam.toInstant();
//      ZonedDateTime atZone = instant.atZone(ZoneId.systemDefault());
//      LocalDate asOfDate = atZone.toLocalDate();
//      List<Integer> queryIdsForDay = queryScheduleService.getQueryIdsForDay(asOfDate, QueryType.valueOf(queryType));
//      
//      System.out.println(queryIdsForDay);



        return RepeatStatus.FINISHED;
    }

}

正如您从评论中看到的那样,tasklet 应该不仅仅是打印 hello world 但到目前为止它甚至还没有打印出来。

控制器运行作业

import java.util.Date;


import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.JobParametersInvalidException;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.aspen.tools.entities.QueryType;


@RestController
@RequestMapping("/api/batch")
public class BatchController 
{
    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    @Qualifier("reportingQueryParallelExecutorJob")
    private Job reportingQueryBatchJob;

    @Autowired
    @Qualifier("exceptionQueryParallelExecutorJob")
    private Job exceptionQueryBatchJob;

    @Autowired
    @Qualifier("monitoringQueryParallelExecutorJob")
    private Job monitoringQueryBatchJob;

    @Autowired
    @Qualifier("notificationSenderJob")
    private Job notificationBatchJob;


    @GetMapping(path = "/reporting")
    public ExitStatus executeReportingJob(@RequestParam(name = "AsOfDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date asOfDate) 
            throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException
    {
        JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
        jobParametersBuilder.addDate("asOfDate", asOfDate);
        jobParametersBuilder.addString("queryType", QueryType.REPORT_QUERY.toString());
        JobParameters jobParameters= jobParametersBuilder.toJobParameters();
        JobExecution run = jobLauncher.run(reportingQueryBatchJob, jobParameters);
        return run.getExitStatus();

    }


}

堆栈跟踪

LOGBACK: No context given for c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1457410641

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.1.RELEASE)

2020-04-21 09:06:43.490  INFO 10632 --- [           main] c.aspen.tools.MonitoringToolApplication  : Starting MonitoringToolApplication on ISDTESTWS103 with PID 10632 (C:\Users\adhikarit\git\data-processing\target\classes started by adhikarit in C:\Users\adhikarit\git\data-processing)
2020-04-21 09:06:43.495  INFO 10632 --- [           main] c.aspen.tools.MonitoringToolApplication  : No active profile set, falling back to default profiles: default
2020-04-21 09:06:45.301  INFO 10632 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2020-04-21 09:06:45.441  INFO 10632 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 127ms. Found 10 repository interfaces.
2020-04-21 09:06:46.070  INFO 10632 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-04-21 09:06:46.657  INFO 10632 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8088 (http)
2020-04-21 09:06:46.669  INFO 10632 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-04-21 09:06:46.670  INFO 10632 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
2020-04-21 09:06:46.793  INFO 10632 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-04-21 09:06:46.794  INFO 10632 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2944 ms
2020-04-21 09:06:47.125  INFO 10632 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-04-21 09:06:47.333  INFO 10632 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-04-21 09:06:47.341  INFO 10632 --- [           main] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2'. Database available at 'jdbc:h2:mem:mydb'
2020-04-21 09:06:48.031  INFO 10632 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-04-21 09:06:48.114  INFO 10632 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.4.8.Final}
2020-04-21 09:06:48.272  INFO 10632 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-04-21 09:06:48.409  INFO 10632 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2020-04-21 09:06:49.715  INFO 10632 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-04-21 09:06:49.724  INFO 10632 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-04-21 09:06:51.101  WARN 10632 --- [           main] o.s.b.c.l.AbstractListenerFactoryBean    : org.springframework.batch.item.ItemProcessor is an interface. The implementing class will not be queried for annotation based listener configurations. If using @StepScope on a @Bean method, be sure to return the implementing class so listener annotations can be used.
2020-04-21 09:06:51.736  WARN 10632 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2020-04-21 09:06:52.438  WARN 10632 --- [           main] o.s.b.a.batch.JpaBatchConfigurer         : JPA does not support custom isolation levels, so locks may not be taken when launching Jobs
2020-04-21 09:06:52.441  INFO 10632 --- [           main] o.s.b.c.r.s.JobRepositoryFactoryBean     : No database type set, using meta data indicating: H2
2020-04-21 09:06:52.463  INFO 10632 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : No TaskExecutor has been set, defaulting to synchronous executor.
2020-04-21 09:06:52.638  INFO 10632 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
2020-04-21 09:06:52.666  INFO 10632 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 14 endpoint(s) beneath base path '/actuator'
2020-04-21 09:06:52.760  INFO 10632 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8088 (http) with context path ''
2020-04-21 09:06:52.762  INFO 10632 --- [           main] c.aspen.tools.MonitoringToolApplication  : Started MonitoringToolApplication in 9.779 seconds (JVM running for 10.27)
2020-04-21 09:07:14.102  INFO 10632 --- [nio-8088-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-04-21 09:07:14.102  INFO 10632 --- [nio-8088-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-04-21 09:07:14.130  INFO 10632 --- [nio-8088-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 27 ms
2020-04-21 09:07:14.251  INFO 10632 --- [nio-8088-exec-1] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=ReportingQueryParallelExecutorJob]] launched with the following parameters: [{asOfDate=1581404400000}]
2020-04-21 09:07:14.272  INFO 10632 --- [nio-8088-exec-1] .t.b.l.JobCompletionNotificationListener : Email Notifications have been disabled
2020-04-21 09:07:14.272  INFO 10632 --- [nio-8088-exec-1] .t.b.l.JobCompletionNotificationListener : EMAIL SUBJECT : Reporting Batch job has started!!
2020-04-21 09:07:14.272  INFO 10632 --- [nio-8088-exec-1] .t.b.l.JobCompletionNotificationListener : EMAIL BODY : Reporting Batch Job is Being started at: Tue Apr 21 09:07:14 MDT 2020
2020-04-21 09:07:14.282  INFO 10632 --- [nio-8088-exec-1] o.s.batch.core.job.SimpleStepHandler     : Executing step: [identifyAndTrackReportQueriesToExecuteStep]
2020-04-21 09:07:14.292 ERROR 10632 --- [nio-8088-exec-1] o.s.batch.core.step.AbstractStep         : Encountered an error executing step identifyAndTrackReportQueriesToExecuteStep in job ReportingQueryParallelExecutorJob

java.lang.NullPointerException: null
    at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:248) ~[spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:208) ~[spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148) [spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.batch.core.job.AbstractJob.handleStep(AbstractJob.java:410) [spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.batch.core.job.SimpleJob.doExecute(SimpleJob.java:136) [spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:319) [spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:147) [spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) [spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:140) [spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_181]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) [spring-aop-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) [spring-aop-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$PassthruAdvice.invoke(SimpleBatchConfiguration.java:127) [spring-batch-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) [spring-aop-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at com.sun.proxy.$Proxy158.run(Unknown Source) [na:na]
    at com.aspen.tools.controllers.api.BatchController.executeReportingJob(BatchController.java:59) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_181]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108) [spring-boot-actuator-2.2.1.RELEASE.jar:2.2.1.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_181]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_181]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.27.jar:9.0.27]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_181]

2020-04-21 09:07:14.297  INFO 10632 --- [nio-8088-exec-1] o.s.batch.core.step.AbstractStep         : Step: [identifyAndTrackReportQueriesToExecuteStep] executed in 13ms
2020-04-21 09:07:14.300  INFO 10632 --- [nio-8088-exec-1] .t.b.l.JobCompletionNotificationListener : Email Notifications have been disabled
2020-04-21 09:07:14.300  INFO 10632 --- [nio-8088-exec-1] .t.b.l.JobCompletionNotificationListener : EMAIL SUBJECT : Reporting batch has Failed
2020-04-21 09:07:14.300  INFO 10632 --- [nio-8088-exec-1] .t.b.l.JobCompletionNotificationListener : EMAIL BODY : Reporting batch has Failed with error: null

2020-04-21 09:07:14.302  INFO 10632 --- [nio-8088-exec-1] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=ReportingQueryParallelExecutorJob]] completed with the following parameters: [{asOfDate=1581404400000}] and the following status: [FAILED] in 39ms



这就是我运行批处理作业的方式:

http://localhost:8088/api/batch/reporting?AsOfDate=2020-02-11

4

0 回答 0