Spring batch 添加Splunk日志记录步骤后,Spring批处理作业未终止
我正在运行一个Spring批处理,但出于日志记录的目的,我将所有日志重定向到Splunk。日志会按预期在Splunk上更新,但现在我的作业不会终止。即使在处理完所有内容后,它仍在运行 启用Splunk日志记录后,如何终止作业 log4j2.xml:Spring batch 添加Splunk日志记录步骤后,Spring批处理作业未终止,spring-batch,log4j2,splunk,Spring Batch,Log4j2,Splunk,我正在运行一个Spring批处理,但出于日志记录的目的,我将所有日志重定向到Splunk。日志会按预期在Splunk上更新,但现在我的作业不会终止。即使在处理完所有内容后,它仍在运行 启用Splunk日志记录后,如何终止作业 log4j2.xml: <?xml version="1.0" encoding="UTF-8"?> <Configuration status="info" name="cspprov
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" name="cspprovmi"
packages="com.prov">
<Appenders>
<SplunkHttp name="http" url="${env:SPLUNK_URL}"
token="${env:SPLUNK_TOKEN}" host="${env:SPLUNK_NAMESPACE}"
index="cba_facts_cs" source="${env:SPLUNK_SOURCE}"
sourcetype="facts_cs:http:log" messageFormat="json"
disableCertificateValidation="true">
<PatternLayout pattern="%msg" />
</SplunkHttp>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
<AppenderRef ref="http" level="info" />
</Root>
</Loggers>
</Configuration>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
我正在考虑的一个解决方法是在代码本身中包括jobstener
和调用system.exit(0)
。这似乎很好,因为即使启用了Splunk日志,它也会终止作业,但不确定是否有更好的方法来实现这一点(即优雅地退出流程)
您是如何运行作业的(在单个JVM中、在webapp中等)?根据您分享的内容,您的工作应在完成第7步后完成。如果它没有停止,这可能意味着step7仍在运行(如果它是面向块的步骤,您确定它的项读取器在某个点返回null吗?),或者有一个资源正在后台运行,阻止JVM退出(例如线程池)。请共享一个复制该问题的文件,以便能够以有效的方式帮助您。是的,后台进程是log4j,我添加了它以将日志从本地路由到Splunk。配置文件位于log4j2.xml中。在我的本地应用程序中很好,但我添加了log4j配置之后。进程没有终止,我必须强制发送退出信号。但是现在,由于它没有正常完成,状态被捕获为未知,而不是在批处理表中完成。因此,我想知道如何将log4j关机信号与spring batch集成,以便删除system.exit代码,并在完成作业后正常关机。您所说的“log4j关机信号”是什么意思?我不确定日志记录是否是阻止JVM停止的原因。同样,请分享一个简单的例子,再现问题,以便能够以有效的方式帮助您。
// Job
@Bean
public Job job(){
return jobBuilderFactory.get("jobCSProvMI4275")
.start(step1())
.next(step2())
.next(step3())
.next(step4())
.next(step5())
.next(step6())
.next(step7())
.incrementer(new RunIdIncrementer())
.build();
}
}
@Bean
public JobExecutionListener jobMi4275ExecutionListener() {
JobExecutionListener jobExecutionListener = new JobExecutionListener() {
@Override
public void beforeJob(JobExecution jobExecution) {
LOGGER.info("jobCSP4275 Started executing..");
}
@Override
public void afterJob(JobExecution jobExecution) {
LOGGER.info("jobCSP4275 finished successfully..Exiting job !!");
System.exit(0);
}
};
return jobExecutionListener;
}