纸上得来终觉浅,绝知此事要躬行——Spring boot任务调度
前言:之前今日开讲项目的时候,用到了Quartz进行任务调度。后来做一个电商项目的时候,还用到了Quartz任务调度。 觉得挺简单的,a peace of cake. 忽略了总结,当时闭着眼睛都能捉麻雀,现在睁着眼睛一片黑!
一、我最开始的想法
前提条件:对Spring boot不熟悉,对于框架代码结构也不熟悉(最近都用NetBeans,有些jar包,用到了就可以马上自动添加依赖啊,现在不行了)
我的想法是:先看看Spring boot有什么,又着重看了我需要用到的任务调度、邮件发送的部分。然后再去实施写代码,事实上,官网写得确实很明白,最开始的任务调度也很顺利
但是,问题就出在了异常报警。 我的思路是用AOP监控每一个任务的执行情况,一旦有异常发生,就发送报警邮件。但是,在织入具体注解的时候,AOP总是切不进去(欺负生人)后来就直接用了正则表达式,但是。。。。。。执手相看泪眼,竟无语凝噎!
问题:
之前一直的习惯可能是做这种非具体业务类实现的时候,第一个工程总是做测试和废弃的,所以在代码规范上就忽略了。 这样做不对,画个大大的×!
效率低下的原因是:1,没有分清楚轻重缓急;2,我不知道目前都有哪些API(为啥我找到的发送邮件API是那样的涅)
二、实践过程
1,根据文档说,Spring boot有两种任务调度的方式,第一种直接使用注解@Scheduled,第二种是通过Quartz。 因为好奇,就折腾Quartz(忽略了Spring做集成后,操作变得简单了),浪费了不少的时间。
2,当发生异常的时候发送邮件提醒就可以了,然而,我刚开始在尝试将异常任务的详细信息保存到数据库和日志(可是我明明可以把这些东西发邮件哒,无语了)
3,同事帮忙弄好了工程,然后弄了两个TODO方法,我再把代码写完了
4,分布式锁的问题,SetNX。 PS:看这个命令的时候,把redis所有的命令溜了一圈
待续。。。 等把这块儿内容做完了,再补全,先把这个事儿记录下来,思维方式严重有bug,到时候得好好规整规整!
2017.11.20续
最主要想说的,其实是在分布式锁这块内容的思维方式上,我最开始的逻辑:
1,先去redis里面取,取不到的话,就相当于没有执行任务调度,加锁—执行,取到值(被加锁),不执行当前的任务调度
2,执行错误,发送邮件
后来经过同事提醒,发现有个大bug: 当我取到值的时候,还有可能是上次的任务调度没执行结束; 还有可能是我的redis失效时间没弄对;还有可能,是我忘了执行结束后,释放锁。 很不小心的,我全中啦,无语凝噎!
经过同事的指点,然后我自己就开始不明白我为什么要先去处理redis里面取值等逻辑,然后加锁,因为这样势必会让多个线程同时进入执行一段相同代码,而这是不必要的。 所以我后来就改掉了,程序一开始就通过setNX去拿锁,拿到锁的,接着执行后续的代码!
三、思考和总结
1,为什么我会绕这么大个圈去解决问题?
2,为什么别人想的比我周全?
纸上得来终觉浅,绝知此事要躬行——Spring boot任务调度的更多相关文章
- 20145211 《Java程序设计》第3周学习总结——绝知此事要躬行
教材学习内容总结 4.1何为面向对象 面向对象,面向过程都是一种思想,没有高低之分.面向对象,就像是对冰箱操作,冰箱是一个介质,用法就像是c语言中的结构体,功能定义在对象上.面向对象,角色转变,让我们 ...
- Java自动化测试框架-02 - TestNG之理论实践 - 纸上得来终觉浅,绝知此事要躬行(详细教程)
理论 TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用 ...
- ES6躬行记(1)——let和const
古语云:“纸上得来终觉浅,绝知此事要躬行”.的确,不管看了多少本书,如果自己不实践,那么就很难领会其中的精髓.自己研读过许多ES6相关的书籍和资料,平时工作中也会用到,但在用到时经常需要上搜索引擎中查 ...
- 10 种保护 Spring Boot 应用的绝佳方法
原文:developer.okta.com/blog/2018/07/30/10-ways-to-secure-spring-boot 译文:www.jdon.com/49653 Spring Boo ...
- Spring Boot 学习前你应该知道的 Maven 知识
Maven 是什么? 回答这个问题,我们先来了解下没有Maven,我们是怎么使用开发者工具IDE去开发Java程序的.我之前开发Java程序不多,但是我还是记得,我是从网上下载或从合作方拷贝 jar ...
- ES6躬行记 笔记
ES6躬行记(18)--迭代器 要实现以下接口## next() ,return,throw 可以用for-of保证迭代对象的正确性 例如 var str = "向
- 走进Spring Boot源码学习之路和浅谈入门
Spring Boot浅聊入门 **本人博客网站 **IT小神 www.itxiaoshen.com Spring Boot官网地址:https://spring.io/projects/spring ...
- React躬行记(14)——测试框架
测试不仅可以发现和预防问题,还能降低风险.减少企业损失.在React中,涌现了多种测试框架,本节会对其中的Jest和Enzyme做详细的讲解. 一.Jest Jest是由Facebook开源的一个测试 ...
- React躬行记(1)——函数式编程
函数式编程是React的精髓,在正式讲解React之前,有必要先了解一下函数式编程,有助于更好的理解React的特点.函数式编程(Functional Programming)不是一种新的框架或工具, ...
随机推荐
- Extjs4.1+desktop+SSH2 搭建环境 项目能跑起来
linux开发感觉可能就是日常办公的时候,用别的软件会有问题,java开发还是没什么区别的,换回window开发: push 它: 每次看到右上那红红的叉,我还以为又出错了: 这个项目用resin,下 ...
- Liunx开发(Extjs4.1+desktop+SSH2超强视频教程实践)(1)
下周一出差宁波了,周六日就折腾点视频: 跟着视频教程开发,不过开发环境换linux,上月找工作,某个吉祥物是松鼠的公司要求用linux开发,没用过的,连面试机会都不给,极其高冷:好吧,咱就试试,用li ...
- iOS keychain注解
+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service { return [NSMutableDictionary dictiona ...
- 【BZOJ3209】花神的数论题(数位DP)
点此看题面 大致题意: 设\(sum(i)\)表示\(i\)二进制中1的个数,请求出\(\prod_{i=1}^n sum(i)\). 数位\(DP\) 很显然,这是一道数位\(DP\)题.我们可以先 ...
- 【BZOJ1965】[AHOI2005] SHUFFLE 洗牌(数学题)
点此看题面 大致题意: 有一叠扑克牌编号为\(1\sim n\)(\(n\)为偶数),每次洗牌将扑克牌平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张,然后取上面一叠的第一张作为新的一叠的第二 ...
- 【洛谷2577】[ZJOI2005] 午餐(较水DP)
点此看题面 大致题意: 有\(N\)个学生去食堂打饭,每个学生有两个属性:打饭时间\(a_i\)和吃饭时间\(b_i\).现要求将这些学生分成两队分别打饭,求最早何时所有人吃完饭. 贪心 首先,依据贪 ...
- Vue 恢复初始值的快速方法
vue 中经常定义很多data ,在用户进行一些操作后,需要讲data中的某个对象定义为初始值 例如 form: { title: '', describe: '', inspectionCatego ...
- 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)
微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- content is king – Bill Gates (1/3/1996) 内容为王 - 比尔盖茨
以下中文版本由谷歌翻译 内容为王 - 比尔盖茨(1/3/1996) 内容是我期望在互联网上赚取大部分真钱的地方,就像在广播中一样. 半个世纪前开始的电视革命催生了许多行业,包括制造电视机,但长期的赢家 ...
- shell的条件判断
.字符串判断 str1 = str2 当两个串有相同内容.长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当串 ...