最近弄一个项目,需要自动监测客户最近90天内是否有变化,若没有变化,这修改客户状态。
本来想用quartz来弄的,想来一下还是觉得太麻烦了,就看了下mysql的存储过程以及事件的创建。
下面分析下quartz以及使用sql 存储过程的优缺点:
quartz优点:1、可以通过在web application层进行管理,而不需要操作数据库(若无数据库权限的话,还是得选择quartz)。
直接使用存储过程优点:1、简单,快速!若使用quartz,需要编写配置文件,修改web.xml配置,并手动添加数据查询以及更新语句。而是要存储过程则只需要简单的几句sql语句即可。
下面详细介绍下MySql处理方式的过程:
1、开启mysql event_scheduler功能。
使用"select @@event_scheduler;"语句查看mysql是否开启了event_scheduler。若没有启动,则使用mysql语句“SET GLOBAL event_scheduler = ON; ”开开启该功能。注:默认情况下,mysql服务是不会启动该功能的。 当然,有另外一种方法是修改mysql的配置文件,修改完后再重新启动mysql即可。
2、添加事件。
本人使用Navicat Lite来管理mysql数据库,因此可以很方便的通过界面来创建新的事件。sql语句如下:
CREATE EVENT `NewEvent`
ON SCHEDULE EVERY 01:00:00 DAY
ON COMPLETION NOT PRESERVE
ENABLE
DO
call releaseCustomer();
3、添加存储过程:
由于我这个只需要对一个表进行操作,因此整个业务都可以用一个sql语句来完成。
CREATE DEFINER=`root`@`localhost` PROCEDURE `releaseCustomer`()
MODIFIES SQL DATA
BEGIN
#Routine body goes here...
update t_gici_customer set CUSTOMER_CONTACTOR_STATE = '2', gici_sales = null
where date_sub(curdate(), interval 90 day) >= last_visit_date and CUSTOMER_CONTACTOR_STATE in ('0','1') ;
END
详细的创建事件以及创建存储过程的用法,可以参照mysql的参考手册。