Как создать общий класс Abstract для планировщика Spring Boot - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть приложение весенней загрузки с двумя планировщиками классов Java (с именами 'A' и 'B').«A» выполняет две работы в разное время. «B» выполняет одну работу каждые 9 секунд.Здесь я дам вам два файла классов. Вы можете вставить их в любое приложение весенней загрузки.Когда мы запускаем приложение, выполняются задания «A» и «B».

A.java

import java.util.ArrayList;
import java.util.Date;
import java.util.concurrent.ScheduledFuture;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;

import com.sample.entity.IiSchedulerCofiguration;
import com.sample.service.CroneService;
import com.sample.util.SchedulerName;

@Configuration
@EnableScheduling
public class A implements SchedulingConfigurer {
    @Autowired
    private CroneService croneService;
    TaskScheduler taskScheduler;
    private ScheduledFuture<?> job1;
    private ScheduledFuture<?> job2;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(10);// Set the pool of threads

        threadPoolTaskScheduler.initialize();
        // final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        ArrayList<IiSchedulerCofiguration> jobList = croneService.getJobDetails(SchedulerName.SCHEDULER_NAME_OF_A);
        for (IiSchedulerCofiguration eachJob : jobList) {
            String jobName = eachJob.getJobName();
            if (jobName.equalsIgnoreCase("job1")) {
                threadPoolTaskScheduler.setThreadNamePrefix("Thread " + SchedulerName.SCHEDULER_NAME_OF_A + " ");
                job1(threadPoolTaskScheduler, eachJob.getJobTime());// Assign the job1 to the scheduler
            }
            if (jobName.equalsIgnoreCase("job2")) {
                job2(threadPoolTaskScheduler, eachJob.getJobTime());// Assign the job1 to the scheduler
            }
        }
        this.taskScheduler = threadPoolTaskScheduler;// this will be used in later part of the article during refreshing
        taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);// the cron expression dynamically
    }

    private void job1(TaskScheduler scheduler, String executionTime) {
        job1 = scheduler.schedule(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + " - JOB 1 OF A IS EXECUTED AT " + new Date());
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                return new CronTrigger(executionTime).nextExecutionTime(triggerContext);
            }
        });
    }

    private void job2(TaskScheduler scheduler, String executionTime) {

        job2 = scheduler.schedule(new Runnable() {
            @Override
            public void run() {

                System.out.println(Thread.currentThread().getName() + " - JOB 2 OF A IS EXECUTED AT " + new Date());

            }
        }, new Trigger() {

            @Override

            public Date nextExecutionTime(TriggerContext triggerContext) {

                return new CronTrigger(executionTime).nextExecutionTime(triggerContext);

            }

        });

    }
} 

B.java

import java.util.Date;
import java.util.concurrent.ScheduledFuture;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;

@Configuration
@EnableScheduling
public class B implements SchedulingConfigurer {
        TaskScheduler taskScheduler;
        private ScheduledFuture<?> job1;
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            ThreadPoolTaskScheduler threadPoolTaskScheduler =new ThreadPoolTaskScheduler();
            threadPoolTaskScheduler.setPoolSize(10);// Set the pool of threads
            threadPoolTaskScheduler.setThreadNamePrefix("scheduler-thread");
            threadPoolTaskScheduler.initialize();
            job1(threadPoolTaskScheduler);// Assign the job1 to the scheduler
            this.taskScheduler=threadPoolTaskScheduler;// this will be used in later part of the article during refreshing the cron expression dynamically
            taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
        }
        private void job1(TaskScheduler scheduler) {
               job1 = scheduler.schedule(new Runnable() {
               @Override
               public void run() {
                  System.out.println(Thread.currentThread().getName() + "Scheduler B is executed at " + new Date());
                    try {
                    Thread.sleep(10000);
                    } catch (InterruptedException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  }
               }, new Trigger() {
                    @Override
                    public Date nextExecutionTime(TriggerContext triggerContext) {
                     String cronExp = "0/9 * * * * ?";// Can be pulled from a db .
                     return new CronTrigger(cronExp).nextExecutionTime(triggerContext);
                  }
                });
           }

   }

Мое требование - создать абстрактный класс, чтобы избежать повторения кода планирования для этого общего класса.Этот абстрактный класс должен быть общим планировщиком для 'A' и 'B'. Как я могу создать абстрактный класс?Как я могу создать общий динамический класс для планировщика. Пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...