- 动机
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字段用空格分隔的字符串。字段可以包含任意允许的值的,随着该字段允许特殊字符的各种组合。
- 你正在测试的任何变化可以很容易地重新部署或重新执行。
- 测试这个邮件定时器
- 登陆:http://localhost:9001/hmc/hybris.
- 总结
- 在本教程中,你已经学会了如何创建一个cronjob。这是在两个步骤进行:
- 创建工作本身 - 定义扩展AbstractJobPerformable一类的业务逻辑,并定义一个Spring bean。请注意,这不需要改变的hybris类型系统(也就是说没有修改items.xml)。
- 创建一个cronjob,并使用IMPEX触发。