带着新人学springboot的应用10(springboot+定时任务+发邮件)
接上一节,环境一样,这次来说另外两个任务,一个是定时任务,一个是发邮件。
1.定时任务
定时任务可以设置精确到秒的准确时间去自动执行方法。
我要一个程序每一秒钟说一句:java小新人最帅
于是,我就写了一个方法,注解里cron里面的很多星星意思是:每个月、周一到周日 、每个小时、每一分、每一秒都执行一次这个方法。

主配置类加个开启注解

ok,可以了,直接启动应用,不需要浏览器,直接在控制台看到打印的消息:

所以我们要掌握的是@Scheduled注解中属性cron的表达式,大概的就是下图所示:

2.发邮件
来测试一下用springboot发邮件,假如我用qq邮箱向一个老哥的网易邮箱发邮件,基本的逻辑就是:从qq邮箱---------->腾讯qq邮箱服务器------------>网易邮箱服务器-------------->163网易邮箱
所以我们要配置的就是我们qq邮箱的账号密码
第一步:导入依赖

第二步:配置文件(看清楚stmp.qq.com这是SMTP服务器中qq邮件的主机地址,其他邮件有自己的STMP主机地址),最后的那个是建议ssl安全连接的,一定要开启

其中,qq邮箱得到授权码步骤如下:



第三步:测试类

运行测试方法,可以在网易云邮箱看到邮件:

3.邮件的高级一点的功能(发邮件有附件)

运行这个测试方法:


4.再高级一点(用模板发送邮件)
还是用博客园注册为例,不知道大家注册的时候是不是收到了一个激活邮件,打开大概的格式就是:xxx用户,您注册博客园账户需要激活,请点击激活邮件激活
咳,记得不太清楚了,应该差不多,嘿嘿!话说难道每个人注册博客园都会用上面的发送html的方式,慢慢拼接html然后发送吗?其实这样也行,只是看起来太lower了,而且代码看起来会很凌乱。
那今天我就用前面学的themeleaf给做个模板,来假装发发邮件,骗骗自己,嘿嘿~(●´∀`●)~
首先导入themeleaf的依赖,指定themeleaf的版本


其实真正开发中,会把这个发邮件的方法写成一个类,传入一些参数就可以发送的,我们嘛,就怎么简单怎么来吧! 
themeleaf文件的位置和内容(不要忘记themeleaf的目录位置和用法了)


点击激活账号,就会跳转到我的controller中的方法,如下:

ok,到这里就可以了,记得,先运行springboot应用,然后运行测试方法,收到邮件,自己激活一下,然后就会跳转到


成功跳转,于是你就激活成功了!

5.可能出现的bug
说说用模板可能会碰到的bug,哎,用了我好几个小时,现在我还是一副日了狗的心情。
怎么回事呢?代码写了,看了好几遍也没错,就是运行就报错,在网上看了别人的代码拿过来还是报错,报错如下:



这个错误大概意思就是我的模板的html中每个标签都要是闭标签,要这种类型的<a></a>,假如是<img xxx>这种标签就会报错。
如下所示,最坑的方法就是修改的,而且以后html的标签都要是一对一对的,坑啊、、、

后来有找了很多资料,原来发现是这里,themeleaf默认应该是2.xx版本,这个版本解析标签都要是一对一对的,到了3.xx之后,就不需要这么麻烦了!

都是版本问题,坑了我好几个小时,哎,记住记住....
带着新人学springboot的应用10(springboot+定时任务+发邮件)的更多相关文章
- 带着新人学springboot的应用01(springboot+mybatis+缓存 上)
上一篇结束,第一次做一个这么长的系列,很多东西我也是没有说到,也许是还没有想到,哈哈哈,不过基本的东西还是说的差不多了的.假如以后碰到了不会的,随便查查资料配置一下就ok. 咳,还有大家如果把我前面的 ...
- 带着新人学springboot的应用04(springboot+mybatis+redis 完)
对于缓存也说了比较多了,大家对下图这一堆配置类现在应该有些很粗略的认识了(因为我也就很粗略的认识了一下,哈哈!),咳,那么我们怎么切换这个缓存呢?(就是不用springboot提供的默认的Simple ...
- 带着新人学springboot的应用09(springboot+异步任务)
本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的 ...
- 带着新人学springboot的应用05(springboot+RabbitMQ 上)
这次就来说说RabbitMQ,这个应该不陌生了,随便一查就知道这个是用来做消息队列的.(注意:这一节很多都是概念的东西,需要操作的比较少) 至于AMQP协议(Advanced Message Queu ...
- 带着新人学springboot的应用07(springboot+RabbitMQ 下)
说一两句废话,强烈推荐各位小伙伴空闲时候也可以写写自己的博客!不管水平高低,不管写的怎么样,不要觉得写不好或者水平不够就不写了(咳,我以前就是这样的想法...自我反省!). 但是开始写博客之后,你会发 ...
- 带着新人学springboot的应用13(springboot+热部署)
spring cloud我想做成一个系列,所以spring cloud+eureka后面会慢慢说到的,有兴趣的小伙伴可以关注后续! 这一节就简单说说springboot的热部署了(我一直想不通为什么叫 ...
- 带着新人学springboot的应用11(springboot+Dubbo+Zookeeper 上)
这次说个在大型项目比较常见的东西,就是分布式,分布式到底是个什么东西呢?概念太大,不好说,就像刚学javaee的人问你,什么是web啊,什么是spring啊等等,你可能觉得,这个东西我好像知道,但是用 ...
- 带着新人学springboot的应用08(springboot+jpa的整合)
这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...
- 带着新人学springboot的应用06(springboot+RabbitMQ 中)
上一节说了这么多废话,看也看烦了,现在我们就来用鼠标点点点,来简单玩一下这个RabbitMQ. 注意:这一节还是不用敲什么代码,因为上一节我们设置了那个可视化工具,我们先用用可视化工具熟悉一下流程. ...
随机推荐
- Vue-Router嵌套路由
1:查看router-view所对应的位置,是属于顶级出口还是存在于某个组件当中 2:当router-view存在于某个组件当中时 const User = { template: ` <div ...
- 网络攻击技术:SQL Injection(sql注入)
网络攻击技术开篇——SQL Injection 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码 ...
- iOS键盘事件实现、控制
记录于2013/6/26: 一.点击键盘上的“Done”按钮关闭键盘 1.视图控制器实现UITextFieldDelegate协议 2.设置文本框属性 textField.returnK ...
- 在Centos中安装mysql
下载mysql 这里是通过安装Yum源rpm包的方式安装,所以第一步是先下载rpm包 1.打开Mysql官网 https://www.mysql.com/, 点击如图选中的按钮 点击如图框选的按钮 把 ...
- 4.再来看看逆向——OD的简介
目录 1.前言 2.一些设置和配置 3.开始了解OD 代码窗口 数据窗口 小端序问题 前言 前3节主要写了恶意代码用到的手段,接下来先写一下关于逆向调试的一些内容.毕竟逆向比较难理解一点. 一些配置和 ...
- LeetCode笔记:39. Combination Sum
题目描述 给定一个无重复的正整数数组 candidates 和一个正整数 target, 求所有和为 target 的 candidates 中数的组合中.其中相同数的不同顺序组合算做同一种组合,ca ...
- git常用方法整理
Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 初始化本地仓库 mkdir xxx cd xxx git init 创建本 ...
- Ubuntu ARM更改为国内源
关键词:ubuntu arm ubuntu-ports 国内源 镜像 阿里源 apt apt-get install update 0%working 速度慢 rk3399 开发板 ...
- [tkinter]Radiobutton单选按钮的使用
首先因为单选按钮有一个特性(一个被选中后,自动清除其它按钮的选中状态) 所以使用方式也有点不同 错误示例 from tkinter import * root = Tk() r1 = Radiobut ...
- LeetCode编程训练 - 回溯(Backtracking)
回溯基础 先看一个使用回溯方法求集合子集的例子(78. Subsets),以下代码基本说明了回溯使用的基本框架: //78. Subsets class Solution { private: voi ...