英文:
Java Spring Boot plus Spring Batch create Jar and run specific job only
问题
我正在尝试创建一个带有Spring Batch应用的Spring Boot应用程序,其中将包含多个作业。
当我尝试构建JAR文件(假设只有一个作业)时,它仍然会启动应用程序并实际运行可用的作业。
mvn clean package
我只是想在这里构建一个JAR,不想实际运行任何作业。
稍后,一旦JAR文件可用,我可以传递一些参数来运行特定的作业。目前我的代码中只有一个作业,以后会有更多。但是我甚至无法运行一个作业。
根据所有在线建议,我到目前为止尝试了以下方法。
BatchConfiguration.java
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
private static final Logger logger = LoggerFactory.getLogger(BatchConfiguration.class);
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public FileDTO fileDTO;
@Bean
public Job fetchJob(Step step) {
return jobBuilderFactory
.get("My Job")
.incrementer(new RunIdIncrementer())
.flow(step)
.end()
.build();
}
@Bean
public Step getData() {
return stepBuilderFactory
.get("get data")
.<FileDTO, FileDTO>chunk(1)
.reader(FileReader())
.processor(new FileProcessor())
.writer(new FileWriter())
.build();
}
}
application.properties
spring.datasource.url=jdbc:postgresql://dbhost:1000/db
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.platform=postgresql
spring.batch.job.names=
我尝试在application.properties
中将spring.batch.job.names
属性设为空白。
运行了 mvn clean package,这帮助我编译和构建JAR文件,而不运行作业。
现在,我正在尝试运行并传递参数,
java -jar target\mytest-0.0.1-SNAPSHOT.jar --spring.batch.job.names=fetchJob
它根本不会启动作业。
请注意,如果我从application.properties
中删除spring.batch.job.names
属性并按照以下步骤操作,mvn clean package => 将会运行作业并创建JAR文件。这就是我不想要的。
因为以后我会有更多的作业,我不希望在创建JAR文件时运行它们。
我在这里漏掉了什么?
英文:
I am trying to have a spring boot with spring batch app, which would have multiple jobs.
When I am trying to build the jar (assuming only one job) it still starts the app and actually runs the available job.
mvn clean package
I am just trying to build a Jar here, do not want to actually run any Job.
Later, once the Jar is available, I can pass some arguments to run a specific Job. For now I have only one job in my code, will have more later. But I am unable to run even one job.
This is what I tried so far based on all online suggestions.
BatchConfiguration.java
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
private static final Logger logger = LoggerFactory.getLogger(BatchConfiguration.class);
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public FileDTO fileDTO;
@Bean
public Job fetchJob(Step step) {
return jobBuilderFactory
.get("My Job")
.incrementer(new RunIdIncrementer())
.flow(step)
.end()
.build();
}
@Bean
public Step getData() {
return stepBuilderFactory
.get("get data")
.<FileDTO, FileDTO>chunk(1)
.reader(FileReader())
.processor(new FileProcessor())
.writer(new FileWriter())
.build();
}
}
application.properties
spring.datasource.url=jdbc:postgresql://dbhost:1000/db
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.platform=postgresql
spring.batch.job.names=
I tried to give blank here for spring.batch.job.names property.
Ran the mvn clean package, which helped me compile and build jar without running the job.
Now, I am trying to run giving the parameter,
java -jar target\mytest-0.0.1-SNAPSHOT.jar --spring.batch.job.names=fetchJob
It does not start the job at all.
Please note that if I remove the property spring.batch.job.names from application.properties and follow the steps, mvn clean package => will run the job and create the Jar. Which is what I don't want.
As later I will have more jobs, which I do not want to run while creating the Jar.
What am I missing here?
答案1
得分: 0
Sure, here's the translated content:
> 我只是在尝试构建一个 Jar 文件,在这里,并不想真正运行任何作业。
不要添加空属性 spring.batch.job.names=
,你需要设置属性 spring.batch.job.enabled=false
。
> 它根本不会启动作业。
如果你移除空属性 spring.batch.job.names=
并且使用以下命令运行作业:
java -jar target\mytest-0.0.1-SNAPSHOT.jar --spring.batch.job.names=fetchJob
那么它应该可以工作。
英文:
> I am just trying to build a Jar here, do not want to actually run any Job.
Instead of adding the empty property spring.batch.job.names=
, you need to set the property spring.batch.job.enabled=false
for that.
> It does not start the job at all.
If you remove the empty property spring.batch.job.names=
and run your job with:
java -jar target\mytest-0.0.1-SNAPSHOT.jar --spring.batch.job.names=fetchJob
then it should work.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论