spring+mybatis+quart2定时发送邮件

来源:互联网 发布:远程软件哪个好用mac 编辑:程序博客网 时间:2024/06/05 00:24

今天有个小需求,每天从9点到20点每隔4小时发送接口检测失败的邮件,之前没接触过quart2,正好借这次需求来学习下...下面直接上代码

spring-basic.xml中的配置如下

 <!-- 调度工厂 -->
    <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
<bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">   <!-- triggers是Spring定时器的特殊属性 --> 
<list>
<ref bean="myJobTrigger" />
</list>
</property>
</bean>
<!-- 启动触发器的配置结束 -->


<!-- 调度的配置开始 --><!--quartz-1.8以前的配置 
<bean id="myJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="myJobDetail" />
</property>
<property name="cronExpression">
<value>0/1 * * * * ?</value>
</property>
</bean>-->

<!-- quartz-2.x的配置 -->  <!-- 主定时计划      定义触发时间 -->
<bean id="myJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail"> <!-- jobDetail是Spring定时器的特殊属性 --> 
<ref bean="myJobDetail" />
</property>
<property name="cronExpression">
<value>0 0 9-20/4 * * ?</value>
</property>
</bean>
<!-- 调度的配置结束 -->


<!-- job的配置开始 -->  <!-- 定义调用对象和调用对象的方法 -->
<bean id="myJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<!-- 调用的类 -->
<ref bean="myJob" />
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>work</value> <!--  就是java类中的任务方法 --> 
</property>
</bean>
<!-- job的配置结束 -->


<!-- 工作的bean -->
<bean id="myJob" class="com.ppdai.controller.MyJob" />


此处就是你实现的业务类包括方法:work()

@Controller
public class MyJob {
private MimeMessage mailMsg; 
private JavaMailSender jms; 
@Autowired
private SystemInfoService systemInfoService; 


public void work() {
 
//get [interface_Management]'s url and email ,judge interface 's status
List<String> emailList = systemInfoService.getAllEmailInterfaceManagement();
if(emailList!=null && emailList.size()>0){
EmailEntity emailEntity = new EmailEntity();
String add = "";String content ="请各领导通知相关负责人检查对应接口!";
StringBuffer sBuffer = new StringBuffer();
sBuffer.append(
"<hr />" + "(本邮件是程序自动下发,请勿回复!)<br /><hr />\n"+add + "<table border=\"1\">\n" + "  <tr>\n"
   + "    <th>接口地址</th>\n" + "    <th>状态码</th>\n" + "    <th>备注</th>\n" + "  </tr>\n");
try {
for(int i=0;i<emailList.size();i++){
String email = emailList.get(i);
List<String> urlsList = systemInfoService.queryInterfaceManagementByEmail(email);
if(urlsList!=null & urlsList.size()>0){
for(int j=0;j<urlsList.size();j++){
HttpClient client = new DefaultHttpClient();
synchronized(client){
HttpPost post = new HttpPost(urlsList.get(j));
HttpResponse httpResponse = client.execute(post);
/**判断是否请求成功getStatusCode()==200*/
if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
sBuffer.append("  <tr>\n" + "    <td>" + urlsList.get(j) + "</td>\n" + "    <td bgcolor='#FF0000'>"
   + httpResponse.getStatusLine().getStatusCode() + "</td>\n" + "    <td>"
   + content + "</td>\n"
   + "  </tr>\n");
   }
System.out.println("date:" + new Date().toString());
}

........//实现你的业务方法

Cron表达式的详细用法
字段 允许值 允许的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可选) 留空, 1970-2099 , - * /



表达式举例
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

0 0
原创粉丝点击