spring注解 @Scheduled(cron = 0 0 1 * * *)的使用来实现定时的执行任务

<span style="font-size:14px;">初次接触定时类的小程序,还是走了很多的弯路,如今终于搞定了,总结如下:</span>
<span style="font-size:14px;">import com.activityvip.api.service.SecurityBlockAccountService;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;import org.springframework.scheduling.annotation.Scheduled;/****/
@Service
public class SecurityAccountUtil {private static Logger logger = Logger.getLogger(SecurityAccountUtil.class);private static final List<String> localhost = Arrays.asList("emidas-activityvip-web02.nh", "emidas-activityvip-web01.beta");@AutowiredSecurityBlockService securityBlockService;@AutowiredSecurityBlockAccountService securityBlockAccountService;@AutowiredSecurityBlockAccountDao securityBlockAccountDao;@Scheduled(cron = "0 0 1 * * *")public void run() {if (checkoutHostName()) {try {logger.info("thread is running");DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String lastTime = securityBlockAccountService.getLastTime();Date myDate1 = dateFormat1.parse(lastTime);Date dAfter = getNextDay(myDate1);Integer numByTime = securityBlockService.getAllNumByTime(myDate1, dAfter);Integer accountByTime = securityBlockService.getAllAccountByTime(myDate1, dAfter);securityBlockAccountService.insertAccountNum(numByTime, accountByTime, dAfter);logger.info("thread is end");} catch (Exception e) {logger.info("SecurityAccountUtil:" + e.getMessage());e.printStackTrace();}}}/*** 获取当前时间后一天的时间** @param date* @return*/public static Date getNextDay(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DAY_OF_MONTH, 1);date = calendar.getTime();return date;}/*** 过滤主机名** @return*/protected boolean checkoutHostName() {String hostName = null;try {hostName = InetAddress.getLocalHost().getHostName();} catch (UnknownHostException e) {logger.info(e);hostName = "localhost";}return localhost.contains(hostName);}
}</span>

最近实习写了一个小小的定时统计的程序,用的是spring的 @Scheduled注解,该注解依赖下面的jar包

<span style="font-size:14px;"> <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.1.1.RELEASE</version></dependency></span>
在使用该注解以前请做好以下准备工作,配置好相应的xm文件。

配置定时注解的步骤:http://blog.csdn.net/sd4000784/article/details/7745947

下面给出cron参数中各个参数的含义:

CRON表达式    含义 
"0 0 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分每分钟一次触发 
"0 0/5 14 * * ?"    每天从下午2点开始到2:55分结束每5分钟一次触发 
"0 0/5 14,18 * * ?"    每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 
"0 0-5 14 * * ?"    每天14:00至14:05每分钟一次触发 
"0 10,44 14 ? 3 WED"    三月的每周三的14:10和14:44触发 
"0 15 10 ? * MON-FRI"    每个周一、周二、周三、周四、周五的10:15触发 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Oracle里,表的别名不能用as,列的别名可以用as

列的别名也可以不用as&#xff0c;如&#xff1a;select t.a xxx from table t在Oracle数据库中&#xff0c;数据表别名是不能加as的&#xff0c;例如&#xff1a; select a.appname from appinfo a;-- 正确 select a.appname from appinfo as a;-- 错误 注释&#xff1a;这…

Android自定义RadioButton

今天公司项目中需要完成一个效果&#xff0c;首先是要用自己的图片&#xff0c;然后文字在按钮图片的左边。 1.使文字在图片的左边&#xff0c;有两种方法&#xff1a; 第一种&#xff0c;设置radioButton的属性&#xff1a; <span style"font-size:24px;">a…

MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔

做了一个简答的小项目&#xff0c;其中遇到了一些数据库的sql使用技巧总结如下&#xff1a; DATE_ADD() 函数向日期添加指定的时间间隔。 当前表所有数据都往后增加一天时间&#xff1a; UPDATE ACT_BlockNum SET CreateTime DATE_ADD(CreateTime, INTERVAL 1 DAY); 当前…

Android蓝牙4.0的数据通讯

我在两家公司都用到了app与BLE设备通讯&#xff0c;当时也是什么都不懂&#xff0c;在网上各种搜索&#xff0c;各种查资料&#xff0c;总算弄出来了。在这里记录下来&#xff0c;希望对有需要的人有些帮助。 1.检测手机是否支持蓝牙4.0&#xff08;一般手机4.3以上的android系…

荐 Intellij IDEA创建Maven Web项目(带有webapp文件夹目录的项目)

转载自&#xff1a;点击打开链接 在创建项目中&#xff0c;IDEA提供了很多项目模板&#xff0c;比如Spring MVC模板&#xff0c;可以直接创建一个基于Maven的Spring MVC的demo&#xff0c;各种配置都已经设定好了&#xff0c;直接编译部署就可以使用。 最开始自己创建maven we…

iOS设计模式 - 迭代器

iOS设计模式 - 迭代器 原理图 说明 提供一种方法顺序访问一个聚合对象中的各种元素&#xff0c;而又不暴露该对象的内部表示。 源码 https://github.com/YouXianMing/iOS-Design-Patterns // // Node.h // IteratorPattern // // Created by YouXianMing on 15/10/26. // …

Android程序杀死自己的进程和其他程序进程方法

1.获取程序进程ID&#xff1b; int pidandroid.os.Process.myPid(); android.os.Process..killProcess(pid); 2.杀死其他程序进程&#xff1b; ActivityManager manager(ActivityManager)getSystemService(ACTIVITY_SERVICE); manager.killBackgroundProcesses("packa…

maven依赖关系中Scope的作用

Dependency Scope 在POM 4中&#xff0c;<dependency>中还引入了<scope>&#xff0c;它主要管理依赖的部署。目前<scope>可以使用5个值&#xff1a; * compile&#xff0c;缺省值&#xff0c;适用于所有阶段&#xff0c;会随着项目一起发布。 * provided&…

如何运行ruby代码

第一种&#xff0c;ruby -e 在命令行中运行下面命令&#xff0c;-e的意思是&#xff0c;把后面的字符串当作脚本执行 ruby -e "print hello" 使用irb交互控制台 在命令行输入irb hello worldxingooxingoo-Lenovo:~/workspace/RubyTest$ irb irb(main):001:0> p &q…

使用ViewPager制作Android引导界面

1.涉及Android知识点&#xff1a; ViewPager组件、Handler机制、SharedPreferences。 2.开发实践&#xff1a; a.布局文件设计。 第一个引导界面one.xml&#xff0c;另外两个布局文件类似。 <?xml version"1.0" encoding"utf-8"?> <LinearLay…

6、控件样式模板和使用

WPF控件模板 潜移默化学会WPF(样式篇)---改造CheckBox&#xff0c;全新metro风格 WPF CheckBox 自定义样式 继续聊WPF控件——自定义CheckBox控件外观 用WPF自定义CheckBox的样式 [wpf教程-自定义样式的checkbox开关控件 http://www_suchso.com/projecteactual/wpf-jiaocheng-c…

Android 蓝牙4.0在实际开发中的运用

1.蓝牙搜索. 首先是获取BluetoothAdapter对象&#xff1a; final BluetoothManager bluetoothManager (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter bluetoothAdapter bluetoothManager.getAdapter(); 当blueto…

Mysql递归查询,无限级上下级菜单

mysql递归查询&#xff0c;mysql中从子类ID查询所有父类&#xff08;做无限分类经常用到&#xff09; 由于mysql 不支持类似 oracle with ...connect的 递归查询语法 之前一直以为类似的查询要么用存储过程要么只能用程序写递归查询. 现在发现原来一条sql语句也是可以搞定的 先…

“睡服”面试官系列第二篇之promise(建议收藏学习)

目录 1promise的定义 2基本用法 3. Promise.prototype.then() 4. Promise.prototype.catch() 5. Promise.all() 6. Promise.race() 7. Promise.resolve() 8. Promise.reject() 9. 两个有用的附加方法 10总结 1promise的定义 Promise 是异步编程的一种解决方案&#xf…

Android M 新的运行时权限开发者需要知道的一切

android M 的名字官方刚发布不久&#xff0c;最终正式版即将来临&#xff01; android在不断发展&#xff0c;最近的更新 M 非常不同&#xff0c;一些主要的变化例如运行时权限将有颠覆性影响。惊讶的是android社区鲜有谈论这事儿&#xff0c;尽管这事很重要或许在不远的将来会…