如何制定每月运行的方法并创建凭证文件?

时间:2018-10-04 13:41:26

标签: java quartz-scheduler amazon-iam

我需要使用Java API每28天旋转一次IAM用户密钥。我有一个有效的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 :(得分:0)

以这种方式尝试。.

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 );

您可以用自己的方式修改Calander方法,此api中有很多方法可以覆盖所需的时间范围。