2

我想知道如何让应用程序执行代码的特定部分,例如在特定时间和日期发送电子邮件的部分代码?

我已经阅读了以下问题,但没有一个答案是正确的,所以我决定再问一次,因为它们很旧并且不容易看到。此外,我的问题是关于执行部分代码而不仅仅是发送电子邮件。

发送-自动-邮件-特定日期-通过-java
java-发送-邮件-自动

我不在乎应该使用哪个框架来解决它,因此选择了两个框架。

请注意,用户应该能够手动完成,想象用户定义一个时间来发送一些电子邮件或在应用程序上设置一个提醒警报的计时器。

4

5 回答 5

4

我认为使用 cron 作业在特定时间间隔执行代码块将是一个更好的选择。同时你可以通过cronmakerQuartz scheduler,他们对我的情况做得更好。

于 2013-05-20T05:47:30.490 回答
2

我建议使用任何与 cron 挂钩的库。Cron 非常灵活,可以在任何特定日期、时间间隔或任何组合安排事情。因此,任何与它挂钩的库都可能是您想要的。

可能有几个库可以连接到 cron,但我使用过一个名为cron4j的库,发现它运行良好,并且易于快速开始使用。

于 2013-05-20T05:46:48.640 回答
2

你应该使用 Quartz 调度器

对于 pom.xml 中的那些条目的依赖关系

第 2 步:现在创建quartz.xml 和类似的条目

        <property name="jobClass" value="com.test.schedule.RunScheduleJob" />

        <property name="jobDataAsMap">
            <map>
                <entry key="runScheduleTask" value-ref="runScheduleTask" />
            </map>
        </property>

    </bean>         

    <!-- Cron Trigger -->
    <bean id="mailTrigger"
        class="org.springframework.scheduling.quartz.CronTriggerBean">

        <property name="jobDetail" ref="runScheduleJob" />
        <!-- <property name="cronExpression" value="0 0/2 * * * ?" /> -->       
        <property name="cronExpression" value="1 0 00 * * ?" />
        <!-- <property name="cronExpression" value="0 10 16 L * ?" /> -->

    </bean>

第 3 步:您将创建一个扩展 QuartzJobBean 的类

public class RunScheduleJob extends QuartzJobBean
{   

    private RunScheduleTask runScheduleTask;


    public RunScheduleJob() {
        runScheduleTask=new RunScheduleTask();
    }

    public RunScheduleTask getRunScheduleTask() {
        return runScheduleTask;
    }
    public void setRunScheduleTask(RunScheduleTask runScheduleTask) {
        this.runScheduleTask = runScheduleTask;
    } 
    protected void executeInternal(JobExecutionContext context)throws JobExecutionException   
{ 
         Trigger tri =  context.getTrigger();
         if(tri.getName().equalsIgnoreCase("mailTrigger")){
             runScheduleTask.sendMailSmsOn();
         }
    }
}

第 4 步:从该类中,您将调用类 RunScheduleTask 中的所有方法 public class RunScheduleTask {

    private IAdminService adminService;



    public IAdminService getAdminService() {
        return adminService;
    }
    public void setAdminService(IAdminService adminService) {
        this.adminService = adminService;
    }   

    public void sendMailSms{
        try{

            adminService.sendMailSmsOnBeforeExpirationDate();

        }catch (Exception e) {
            log.error("Error occured in sendMailSmsOnBeforeExpirationDate ", e);
        }

    }
于 2013-05-20T06:55:23.880 回答
1

如果您使用的是 Spring Framework(根据标签),我认为使用@Scheduled注释将是完成目标的最简单方法。

于 2013-05-20T09:52:34.960 回答
1

你还没有说这是服务器还是客户端 - 但如果你只是想让客户端应用程序检查时间然后采取一些行动,你可以将行动定义为一个函数,获取时间,检查时间是否适合一个特定的时间段并运行该函数(如果有)。像这样的东西:

  document.addEventListener("DOMContentLoaded", function()    {
  var time=new Date().getHours();
    if (8 <= time && time <= 14)
           {
        yourFunction();
           }
    else 
           {
        anotherfunction();
           }
     });

如果您需要日期和时间,可以很容易地细化变量。

于 2013-05-20T06:15:32.303 回答