13. CronJobs

- 动机

    CronJobs提供用于在特定的时间和间隔执行业务逻辑的装置。例如,管理员可能要在午夜进行清点每个星期日,或9日至5每隔一小时通知网络管理员从周一至周六的服务器上的峰值负载的。我们的cronjob应该运行每天发送含排名列表的电子邮件。如果你足够幸运,有可以使用SMTP服务器,你可以设置具体如下。如果你不这样做,会的cronjob只是呼应文本到命令提示符。

- 任务

    - 设置电子邮件使用Gmail

    - 确定Job

    - 创建CronJob(定时器)和Trigger(触发器)

    - 测试Job

    - 总结


- 设置电子邮件使用Gmail

    - 我们将在这里设置一个样品的Gmail SMTP服务器。您可以创建一个帐户与此训练(http://mail.google.com)使用。

    - 首先配置本地的 config/local.properties 文件

    config/local.properties    
     
 [email protected] 
     
 [email protected] 
     
 mail.smtp.server=smtp.gmail.com 
     
 mail.smtp.port=587 
     
 mail.smtp.user=你的账号 
     
 mail.smtp.password=你的密码 
     
 mail.smtp.starttls.enable=true

    - 不要忘记设置您的账号和密码


- 确认Job

    - 创建一个 SendRankingJob.java 类 在  de/hybris/platform/cuppytrail/jobs  包下

    src/de/hybris/platform/cuppytrail/jobs/SendRankingJob.java    
package de.hybris.platform.cuppytrail.jobs;
 
import de.hybris.platform.cronjob.enums.CronJobResult;
import de.hybris.platform.cronjob.enums.CronJobStatus;
import de.hybris.platform.cronjob.model.CronJobModel;
import de.hybris.platform.cuppy.model.PlayerModel;
import de.hybris.platform.cuppy.services.MailService;
import de.hybris.platform.cuppy.services.PlayerService;
import de.hybris.platform.cuppy.services.RankingData;
import de.hybris.platform.servicelayer.cronjob.AbstractJobPerformable;
import de.hybris.platform.servicelayer.cronjob.PerformResult;
 
import java.util.List;
 
import org.apache.log4j.Logger;
 
 
public class SendRankingJob extends AbstractJobPerformable<CronJobModel>
{
    private static final Logger LOG = Logger.getLogger(SendRankingJob.class);
 
    private PlayerService playerService;
    private MailService mailService;
 
    @Override
    public PerformResult perform(final CronJobModel cronJob)
    {
        LOG.info("Sending ranking mails");
        final List<RankingData> rankings = playerService.getRankings();
 
        if (rankings.isEmpty())
        {
            LOG.info("No competitions have changed, skipping send of ranking mails");
            return new PerformResult(CronJobResult.SUCCESS, CronJobStatus.FINISHED);
        }
 
        for (final PlayerModel player : playerService.getAllPlayers())
        {
            final List<RankingData> playerRankings = playerService.filterRankingsForPlayer(rankings, player);
            if (!playerRankings.isEmpty() && player.isSendNewsletter())
            {
                mailService.sendRankingMail(player, playerRankings);
            }
        }
        return new PerformResult(CronJobResult.SUCCESS, CronJobStatus.FINISHED);
    }
 
    public void setPlayerService(final PlayerService playerService)
    {
        this.playerService = playerService;
    }
 
    public void setMailService(final MailService trailMailService)
    {
        this.mailService = trailMailService;
    }
}

    -新JobPerformable必须被定义为一个Spring bean在cuppytrail-spring.xml。

    resources/cuppytrail-spring.xml    
<bean id="sendRankingJob" 
      class="de.hybris.platform.cuppytrail.jobs.SendRankingJob" 
      autowire="byName"/>

    - cmd命令运行 ant clean all >hybrisserver debug>http://localhost:9001>update数据

    - http://localhost:9001/console/flexsearch. 这这里执行下面的代码,可以查询你的创建

select {code} from {servicelayerjob} where {code} = 'sendRankingJob'

- 创建定时器和触发器(CronJob and the Trigger)

    - 要创建的cronjob和触发器,您可以:

        - 你可以去采用hybris管理控制台的控制台选项卡中选择IMPEX导入,并通过点击导入内容按钮执行以下IMPEX脚本

INSERT_UPDATE CronJob; code[unique=true];job(code);singleExecutable;sessionLanguage(isocode)
;sendRankingCronJob;sendRankingJob;false;de
 
INSERT_UPDATE Trigger;cronjob(code)[unique=true];cronExpression
#% afterEach: impex.getLastImportedItem().setActivationTime(new Date());
; sendRankingCronJob; 0 0 0 * * ?

       - 或者在cuppytrail/resources/impex/ 创建一个ImpEx(命名方式:essentialdata*.impex    或    projectdata*.impex). 登陆:http://localhost:9001/hmc/hybris.左菜单栏System>Tools>Import 导入这个文件

       - cmd命令>Ctrl+C>ant clean all >hybrisserver 

        - 一个cron表达式是由6或7字段用空格分隔的字符串。字段可以包含任意允许的值的,随着该字段允许特殊字符的各种组合。     

            13. CronJobs_第1张图片

        - 你正在测试的任何变化可以很容易地重新部署或重新执行。


- 测试这个邮件定时器

    - 登陆:http://localhost:9001/hmc/hybris.

        13. CronJobs_第2张图片

        13. CronJobs_第3张图片


总结

    - 在本教程中,你已经学会了如何创建一个cronjob。这是在两个步骤进行:

        - 创建工作本身 - 定义扩展AbstractJobPerformable一类的业务逻辑,并定义一个Spring bean。请注意,这不需要改变的hybris类型系统(也就是说没有修改items.xml)。

        - 创建一个cronjob,并使用IMPEX触发。


你可能感兴趣的:(13. CronJobs)