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

Мне нужно поворачивать ключ пользователя IAM каждые 28 дней, используя Java API.У меня есть рабочий API, который создаст новый ключ и удалит старый.Однако проблема заключается в интеграции этого с моим текущим приложением, чтобы через 28 дней он запустил мой метод и сгенерировал новый файл учетных данных.

Основное приложение будет работать все время.Наряду с этим, у меня будет один метод, который создаст этот файл учетных данных, и он должен запускаться только через 28 дней после последнего обновления времени файла.

Как запустить процесс создания файла каждые 28 дней?Я имею в виду, как рассчитать или запустить этот метод через 28 дней после последнего создания?

Я использую Quartz, чтобы запланировать запуск этого метода, но я запутался в подсчете количества дней и его запуске.

Вот то, что я использую:

public static void main(String[] args) throws Exception {
        JobDetail job = new JobDetail();
        job.setName("dummyJobName");
        job.setJobClass(HelloJob.class);
        // configure the scheduler time
        File file = new File("C:\\Users\\u6034690\\.aws\\credentials");
        Date lastModifiedDate = new Date(file.lastModified());
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

        String strFormatedLastModifedDate = sdf.format(lastModifiedDate);
        System.out.println("After Format : " + strFormatedLastModifedDate);

        Calendar c = Calendar.getInstance();
        c.setTime(lastModifiedDate); // Now use today date.
        c.add(Calendar.DATE, 28); // Adding 28 days
        String output = sdf.format(c.getTime());
        System.out.println(output);
        Date millisd = c.getTime();
        long millis = millisd.getTime();
        System.out.println(millis);

        SimpleTrigger trigger = new SimpleTrigger();
        trigger.setName("Test");
        trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
        trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
        trigger.setRepeatInterval(30000);
        // schedule it
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    }

Проблема в следующей части:

trigger.setRepeatInterval(30000); 

1 Ответ

0 голосов
/ 05 октября 2018

Попробуйте таким образом ..

GregorianCalendar executionDate = new GregorianCalendar();
executionDate .set(Calendar.DAY_OF_MONTH, 28);

и составьте расписание триггера следующим образом ..

Trigger repeatTrigger = newTrigger()
            .withIdentity("Repeat at 28")
            .usingJobData(orderDataMap).startAt(executionDate .getTime()).forJob(job).build();

scheduler.scheduleJob(repeatTrigger );

Вы можете изменить подход Каландера, так как в этом есть многочисленные методыAPI для достижения желаемого периода времени.

...