如何以不同的模式创建和运行jar文件,使其功能不同?

时间:2018-08-29 14:50:41

标签: java jar spring-batch executable-jar

我是一位天真的Java J2EE开发人员。我创建了一个Spring Batch应用程序,该应用程序执行以下任务:

  1. 如果行数<100,则插入10条记录
  2. 插入10条记录(不验证现有行数)

我需要以如下方式运行Jar文件:

  1. java -jar HelloWorld.jar -threshold hello.properties第一步需要执行
  2. java -jar HelloWorld.jar -force hello.properties第二步需要执行

如何创建一个jar文件,使其读取“阈值” /“ force”并执行特定操作?请帮忙。

预先感谢

1 个答案:

答案 0 :(得分:0)

您可以使用配置文件定义步骤,并在运行时使用spring.profiles.active属性相应地加载它们。例如:

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@EnableBatchProcessing
public class JobWithProfiles {

    @Autowired
    private JobBuilderFactory jobs;

    @Bean
    public Job job(Step step) {
        return jobs.get("job")
                .start(step)
                .build();
    }

    @Configuration
    public static class Step1Config {

        @Autowired
        private StepBuilderFactory steps;

        @Profile("threshold")
        @Bean
        public Step step() {
            return steps.get("step")
                    .tasklet((contribution, chunkContext) -> {
                        System.out.println("executed in threshold mode");
                        return RepeatStatus.FINISHED;
                    })
                    .build();
        }
    }

    @Configuration
    public static class Step2Config {

        @Autowired
        private StepBuilderFactory steps;

        @Profile("force")
        @Bean
        public Step step() {
            return steps.get("step")
                    .tasklet((contribution, chunkContext) -> {
                        System.out.println("executed in force mode");
                        return RepeatStatus.FINISHED;
                    })
                    .build();
        }
    }

}

注意:您还可以在配置类上放置@Profile注释。

现在,如果您使用java -jar -Dspring.profiles.active=threshold HelloWorld.jar hello.properties运行此应用程序,它将显示:executed in threshold mode。与force个人资料相同。

有关个人资料的更多详细信息,请参阅以下页面:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

我希望这会有所帮助。