Как создать и запустить файл JAR в разных режимах, чтобы он мог работать по-разному? - PullRequest
0 голосов
/ 29 августа 2018

Я наивный разработчик Java J2EE. Я создал весеннее пакетное приложение, которое выполняет следующие задачи:

  1. Вставьте 10 записей, если количество строк в <100 </li>
  2. Вставить 10 записей (без проверки количества существующих строк)

Мне нужно запустить файл Jar таким образом, чтобы при выполнении:

  1. java -jar HelloWorld.jar -threshold hello.properties первый шаг должен быть выполнен
  2. java -jar HelloWorld.jar -force hello.properties второй шаг должен быть выполнен

Как создать файл jar, в котором он читает «порог» / «сила» и выполняет определенную операцию? Пожалуйста помоги.

Заранее спасибо

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете использовать профили для определения ваших шагов и соответственно загружать их во время выполнения, используя свойство 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

Надеюсь, это поможет.

...