有这样一项需求:自助建站产品到期之后,通过程序自己把它关闭了,然后待客户续费之后再重新开通,如果三个月客户一直不续费,则通过程序把当前自助建站产品删除了。要求是每三分钟执行一次。以下是实现过程。
一。首先写了一个LoopVZZJZ.java的类,里面包含两个方法:
a.loopServiceExpired()说明:检查服务是否进入续费期,就是说是否要调用关闭接口。
String sql = "select id, service_code,domain_name,website_id from SERVICE_VIRTUALHOST where ";
sql += " service_state='" + AgentConstants.SERVICE_STATE_OPENED + "'";
sql += " and taste_type='" + AgentConstants.TASTE_TYPE_NOT + "'";
sql += " and to_char(service_end_date,'yyyy-MM-dd')<= '" + DateUtil.getCurrentDate() + "'";
说明:这个sql语句就是说要查询是否有自助建站商品到期时间小于当前时间并且服务状态还处在服务期的,查出来之后调用调子商务部的接口将其关闭,然后将其状态置为续费期。
b.loopDeleteService()说明:是否有三个月还没有续费的自助建站产品
String sql = "select service_code from SERVICE_VIRTUALHOST where ";
sql += " service_state='" + AgentConstants.SERVICE_STATE_RENEWING + "'";
sql += " and taste_type='" + AgentConstants.TASTE_TYPE_NOT + "'";
sql += " and service_end_date+90 <= to_date('"+DateUtil.getCurrentDate()+" 23:59:59','yyyy-mm-dd hh24:mi:ss')";
二。配置loopVZZJZ.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >
<beans>
<!-- update by tangwenchao 2010-08-26 自助建站轮循 -->
<bean name="loopVZZJZManage" autowire="byName" class="com.sitechasia.xinnet.agent.serv.service.impl.LoopVZZJZ"></bean>
<!-- 服务到期轮询 -->
<!--定义定时执行testQuarz 这个bean中的sayHello()方法-->
<bean id="loopServiceExpired_methodVH" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="loopVZZJZManage" />
</property>
<property name="targetMethod">
<value>loopServiceExpired</value>
</property>
</bean>
<!--触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是helloworldTask,即触发器去触发哪个bean..并且我们还定义了触发的时间:每三分钟一次--!>
<bean id="loopServiceExpiredTimeVH"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="loopServiceExpired_methodVH" />
</property>
<property name="cronExpression">
<!-- 关键在配置此表达式 -->
<value>0 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * ? </value><!-- [color=red]从左到右分别是:秒(0-59) 分(0-59) 时(0-23) 日期(1-31) 月份(1-12) 星期(1-7) 空格为单位的分隔符,*代表所有的时间 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 代表没三分钟执行一次[/color]-->
</property>
</bean>
<!-- 服务删除轮询 -->
<!--定义定时执行testQuarz 这个bean中的sayHello()方法-->
<bean id="loopServiceDelete_methodVH" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="loopVZZJZManage" />
</property>
<property name="targetMethod">
<value>loopDeleteService</value>
</property>
</bean>
<!--触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是helloworldTask,即触发器去触发哪个bean..并且我们还定义了触发的时间:每天5:17pm-->
<bean id="loopServiceDeleteTimeVH"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="loopServiceDelete_methodVH" />
</property>
<property name="cronExpression">
<!-- 关键在配置此表达式 -->
<value>0 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * ? </value><!-- 从左到右分别是:秒(0-59) 分(0-59) 时(0-23) 日期(1-31) 月份(1-12) 星期(1-7) -->
</property>
</bean>
<!--管理触发器的总设置,管理我们的触发器列表,可以在bean的list中放置多个触发器。
-->
<bean autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- <ref local="loopRenewExpired_timeVH" />
<ref local="loopTasteExpired_timeVH" />
<ref local="loopSubProductExpired_timeVH" />
<ref local="loopActivateExpired_timeVH" />
<ref local="loopOpenTaste_timeVH" />
<ref local="loopMessage_timeVH" />
<ref local="loopDeleteTransition_timeVH" />
<ref local="loopTransitionVHostExpired_timeVH" />
<ref local="loopUpgrade_timeVH" />-->
<ref local="loopServiceDeleteTimeVH" />
<ref local="loopServiceExpiredTimeVH" />
</list>
</property>
</bean>
</beans>