Springboot 开启异步任务Async,邮件发送任务,定时任务

异步任务

1.主启动类开启异步注解

 

2.service目录下开启异步任务注解

@Service
public class AsyncService {
    @Async//异步任务注解的标志
    public  void  hello(){
        try {
            Thread.sleep(3000);
        }
        catch (InterruptedException e){
            e.printStackTrace();
        }
        System.out.println("数据正在处理中...");
    }
}

 

3.controller目录下的方法调用service目录下的方法

@RestController
public class AsyncController {
    @Autowired
    AsyncService asyncService;
    @RequestMapping("/h")
    public String hello(){
        asyncService.hello();//停止3秒
        return  "ok";
    }
}

 

4.运行结果

 

 

Springboot邮件发送简单任务

1.导入依赖并配置properties文件

<!-- http://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.6.3</version>
</dependency>

 

 

2.测试代码

 

 

3.运行结果

 4.实现复杂的邮件发送

代码

 运行结果:

 定时任务

 1.主启动类开启定时任务的注解

 

2.测试

 运行结果:

 

本文转载于网络 如有侵权请联系删除

相关文章

  • Vogue Shopify主题模板配置修改

    Vogue是一个书样式外观高度可视化产品的Shopify主题,可以创造奢华的购物体验,提升您的品牌和销量。VogueShopify主题特色针对大图像进行了优化在整个商店中展示高分辨率商品图像。宽布局充分利用具有全宽布局的大型影像。网格样式布局在主页上以网格样式布局展示多个产品、帖子或促销信息。查找手册功能在以社论式跨页显示产品系列的样板中展示您的产品。连续产品滚动通过在产品页面之间无限滚动来提高可发现性。侧边栏菜单在简单的侧边栏菜单中展示产品,产品系列,社交媒体链接等。‎查找手册功能‎‎Vogue独特的“Lookbook”功能可让您以社论风格的跨页展示系列。‎‎无限滚动‎‎通过在产品页面之间连续滚动来提高产品的可发现性。‎‎针对大图像进行了优化‎‎在整个商店中使用高分辨率产品图像展示您的产品。‎‎砌体和标准布局‎‎在砖石和标准布局中展示多个产品,帖子或促销。‎哪些店铺使用了vogueshopify主题https://www.killaknits.pe/https://vonlinnestudio.com/https://tdavlin.com/https://capitana.eu/h

  • 多线程详解(一)

    什么是多线程,java创建多线程方式多线程1.什么是多线程,为什么使用多线程?线程首先得说到进程, 进程:正在执行的应用程序。是系统进行资源分配和调用的独立单元。每一个进程都有他自己的内存空间和系统资源,简单说就是程序进入内存运行变成一个进程,具有一定独立功能。 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。什么是多线程呢? 即就是一个程序中有多个线程在同时执行。 如果只用单线程响应HTTP请求,即处理完一条请求,再处理下一条请求的话,CPU会存在大量的闲置时间。 相比单线程顺序执行,多线程提高了应用程序的使用率。创建多线程创建多线程有三种方式:1.继承Thread类创建线程使用继承Thread类创建线程的步骤如下:1.新建一个类继承Thread类,并重写Thread类的run()方法。 2.创建Thread子类的实例。 3.调用该子类实例的start()方法启动该线程。代码举例如下:publicclassThreadDemoextendsThread{ //1.新建一个类继承Thread类,并重写Thread类的run()方法。 @Overr

  • JS实现二叉树

    <!DOCTYPEhtml> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"> <title>二叉树</title> <metaname="Keywords"content=""> <metaname="sdescription"content=""> <styletype="text/css"> *{margin:0;padding:0;} a{text-decoration:none;color:#111;} li{list-style:none;} body{background:#FFF;font-size:14px;font-family:"微软雅黑";color:#666;} </style>

  • ​测开必备,推荐几款前端性能测试工具、神器

    我们在使用网站过程中,经常会遇到慢的问题,为了找到原因,一般需要借助工具进行检测,通过工具,可以检测出前端站点加载资源的相关详细情况。今天,就给大家介绍几款前端性能测试分析工具,结合性能测试工具,实现通过量化的方式测试网站中诸如首字节加载时间(timetofirstbyte)或者渲染时间等表现。其中有些工具还会检查资源是否被缓存,多个CSS或JS文件是否值得合并,最后自动给出前端性能优化改进建议报告,如果对你有用的话,欢迎收藏转发。1、LighthouseLighthouse是一个开源的自动化工具,用于帮助改进网络应用的质量。可将其作为一个Chrome扩展程序运行,或从命令行运行。Lighthouse分析web应用程序和web页面,收集关于开发人员优秀实践的现代性能指标和见解,让开发人员根据生成的评估页面,来进行网站优化和完善,提高用户体验。当为Lighthouse提供一个要审查的网址,它将针对此页面运行一连串的测试,然后生成一个有关页面性能的报告。可以参考失败的测试,看看可以采取哪些措施来改进应用。使用入门运行Lighthouse的方式有两种:作为Chrome扩展程序运行,或作为命令

  • ashx读写txt文件

    引用usingSystem.IO; usingSystem.Text;复制读取txt文件StreamReadersr=newStreamReader("c:\\a.txt",System.Text.Encoding.Default); varvalues=""; Stringline; while((line=sr.ReadLine())!=null) { values+=line.ToString(); } //关闭读取 sr.Close(); //输出读取结果 context.Response.Write(values);复制重新写入tx文件FileStreamfs=newFileStream("c:\\a.txt",FileMode.Create); //获得字节数组 byte[]data=System.Text.Encoding.Default.GetBytes("存的值"); //开始写入 fs.Write(data,0,data.Length); //清空缓冲区、关闭流 fs.Flush();

  • Kbone + 云开发快速助力小程序 & Web同构

    一开始的时候,我只是做Web前端页面,后来我可以做小程序&Web的前后台,因为我用了Kbone和云开发。本文通过一个小实践来介绍Kbone和云开发的结合使用。Q:Kbone是什么?A:Kbone是一个致力于微信小程序和Web端同构的解决方案。用图片来解释,就是一个Web项目+Kbone就可以变成小程序项目。什么?听说你想知道Kbone和其他同构方案的对比?可以看看我之前写的文章《揭开微信小程序Kbone的神秘面纱》更多Kbone相关知识二、云开发介绍Q:云开发又是什么?A:无需搭建服务器,即可使用云端能力。我们这次的实践主要用到云开发的两个能力云函数:一段运行在云端的代码数据库:一个json数据库云开发多端支持:因为Kbone是做同构的,所以云开发也需要支持多端,这里云开发给我们提供了多端的SDK。三、实践项目介绍本次实践主要做了两个模块显示列表:数据拉取操作新增列:增加数据操作|--build//配置 |--webpack.config.js//Web端构建配置 |--webpack.mp.config.js//小程序端构建配置 |--miniprogram.config.j

  • MySQL流转工具Maxwell的代码改造和优化小结

    Maxwell是开源产品,相比Canal的体量也小很多,综合考虑下,在短期内选择了Maxwell.从快速上手到功能支持,算是一个总体支持还不错的产品,也让技术调研和迭代进度进展相对快了很多。 一般说要比较,基本都会拿出这幅图来(数据带有主观特点,仅供参考),因为考虑到bootstrap是个硬性需求,所以这部分的功能考量也是一个重要权衡。最近在做数据库到大数据流转的过程中发现了Maxwell的一些问题和改进点:1)Maxwell的服务管理模式目前只支持start模式,如果要停止只能采用手工kill的方式,相对粗暴一些,当然和作者交流,可以使用信号处理的方式来间接实现。2)Maxwell的核心配置是对于同步对象的过滤,可以支持正则等模式,如果过滤规则较为复杂,或者后期不断的调整,每次调整都需要重新启动Maxwell服务,没有类似reload的模式。3)对于DDL变更,如果Maxwell的初始化已完成,服务已启动,在后续创建一张表的时候,Maxwell会把变更记录至`schemas`表中维护版本变更记录,在已有的元数据表中`tables`和`columns`里面就没有这些信息了,对于后端的服

  • Centos8搭建本地Web服务器的实现步骤

    1概述系统centos8,利用httpd搭建本地web服务器.2安装httpdsudoyuminstall-yhttpd复制3启动服务servicehttpdstart复制4设置开机启动先查看有没有设置开机启动:systemctllist-unit-files|grephttpd复制没有的话设置:chkconfighttpdon复制再确认一下:systemctllist-unit-files|grephttpd复制5访问再浏览器输入内网ip地址(内网ip可以通过ifconfig查看).若出现以下页面则表示成功.6修改默认主页默认的网站根目录位于/var/www/html下,可以通过修改/etc/httpd/conf/httpd.conf修改.这里只是修改主页.在/var/www/html创建一个index.html:cd/var/www/html sudovimindex.html复制随便输入一点内容,然后刷新在浏览器即可.以上就是本文的全部内容,希望对大家的学习有所帮助。

  • java异常体系及1.7中的try-with-resources

    1.java异常体系架构异常指java运行过程出现的错误,在java中,将异常当作对象来处理,java.lang.Throwable是所有异常的超类。其架构如下图: 1.1ThrowableThrowable是Java语言中所有错误或异常的超类。  Throwable包含两个子类:Error和Exception。用于标识具体的异常情况。1.2ErrorError指程序无法处理的错误,当出现这些错误时,jvm通常会终止程序的运行。Error常见的子类有java.lang.StackOverFlowError和Java.lang.OutOfMemoryError等。java编译器不会检查error及其子类。1.3ExceptionException是Throwable的子类,指程序本身可以处理的错误。遇到此类异常,应该尽可能的处理异常,使程序恢复运行,而不是随意终止异常。1.4RuntimeExceptionRuntimeException及其子类也叫运行时异常,如NullPointerException、IndexOutOfBoundsException等,这些异常编译器不会检查,此类异

  • 客户端负载均衡Ribbon之源码解析

    什么是负载均衡器?假设有一个分布式系统,该系统由在不同计算机上运行的许多服务组成。但是,当用户数量很大时,通常会为服务创建多个副本。每个副本都在另一台计算机上运行。此时,出现“LoadBalancer(负载均衡器)”。它有助于在服务器之间平均分配传入流量。服务器端负载均衡器传统上,LoadBalancers(例如Nginx、F5)是放置在服务器端的组件。当请求来自客户端时,它们将转到负载均衡器,负载均衡器将为请求指定服务器。负载均衡器使用的最简单的算法是随机指定。在这种情况下,大多数负载平衡器是用于控制负载平衡的硬件集成软件。重点:对客户端不透明,客户端不知道服务器端的服务列表,甚至不知道自己发送请求的目标地址存在负载均衡器。服务器端维护负载均衡服务器,控制负载均衡策略和算法。客户端负载均衡器当负载均衡器位于客户端时,客户端得到可用的服务器列表然后按照特定的负载均衡策略,分发请求到不同的服务器。重点:对客户端透明,客户端需要知道服务器端的服务列表,需要自行决定请求要发送的目标地址。客户端维护负载均衡服务器,控制负载均衡策略和算法。目前单独提供的客户端实现比较少(我用过的只有Ribbon

  • 如何从三流程序员成长为年薪50W的架构师?

    计科专业毕业从事嵌入式开发多年,最近由于业务需要在java服务器后端开始涉猎研究。不知道三流程序员这个概念是行业内谁给出的定义,一个技术人员的水准和能力特别是程序员,一句话概括就是解决问题的能力,水平自然有高低之分,但不是永恒的,编程本来就是一个自我认知的过程,程序员的技术能力是一个长期积累的过程,只要还在这个行业内就有机会继续积累,继续提升编程解决问题的能力。一个程序员要达到50万年薪,首先所在坐标必须锁定一线城市,这个年薪在一线大厂属于技术专家级别,放在阿里技术等级里面属于P7顶层P8初始工资阶段,在腾讯百度基本上差异不大,所以要达到这个级别没有两把刷子是不行的。一个程序员如何成为年薪50万的架构师?从自身如何做起,根据个人的一些见解需要满足以下几点才有可能性达到这种技术层面(1)工作年限至少要5年以上,潜质再高也离不开技术经验的积累,经验在里面的占比非常高,当然这些年限不是混日子搞出来的,需要真正的项目经验,程序员面试主要看的就是真真的项目经验。(2).在某一方面一定有专长,在技术行业能做到全才只有少数人,还是需要有一技之长,如果这个专长在红利期的行业工资可能还会更高,要对某一方

  • webpack 中版本兼容性问题错误总结

    一定不要运行npmi XXX -g(-d)一定要指定版本,尽量低版本,也不最新版本,会导致不兼容和指令不一样的问题。1.安装webpack-dev-server报错,说需要webpack-cli,原因,这两个之中某一个版本太高。,重新安装低版本2.安装webpack-cli,然后还是不能使用,3.npmWARNwebpack-cli@3.0.8requiresapeerofwebpack@^4.x.xbutnoneisinstalled.Youmustinstallpeerdependenciesyourself.。。说明安装的Webpack版本太高,切换到,---》》》》》》》》》"webpack":"^3.6.0",4.最后安装"webpack-cli":"^3.0.0",5.安装"webpack-dev-server":"^2.9.1"报错总结:【1】npmWARNwebpack-cli@3.0.8requiresapeerofwebpack@^4.x.xbut

  • 详解Java构造方法为什么不能覆盖,我的钻牛角尖病又犯了....

    一看ThinkinJava,遇到个程序classEgg2{ protectedclassYolk{ publicYolk(){ System.out.println("Egg2.Yolk()"); } publicvoidf(){ System.out.println("Egg2.Yolk.f()"); } } privateYolky=newYolk(); publicEgg2(){ System.out.println("NewEgg2()"); } publicvoidinsertYolk(Yolkyy){ y=yy; } publicvoidg(){ y.f(); } } publicclassBigEgg2extendsEgg2{ publicclassYolkextendsEgg2.Yolk{ publicYolk(){ System.out.println("BigEgg2.Yolk()"); } publicvoidf(){ System.out.println("B

  • 使命必达: 深入剖析WCF的可靠会话[实例篇](内含美女图片,定力差者慎入)

    通过前面一系列的博文(《WCF并发(Concurrency)的本质》、《并发中的同步》、《实践重于理论》、《并发与实例上下文模式》、《回调与并发》、《ConcurrencyMode.Multiple模式下的WCF服务就一定是并发执行的吗[上篇]》、《ConcurrencyMode.Multiple模式下的WCF服务就一定是并发执行的吗[下篇]》、《控制并发访问的三道屏障[上篇]》和《控制并发访问的三道屏障[下篇]》),我对WCF的并发体系进行了深入的剖析,在接下来的博文中,我只要专注于WCF的可靠会话机制。作为一个通信基础平台,WCF必须保证通信的可靠性。由于消息交换是WCF采用的通信手段,通信可靠性的保障体现在确保消息的可靠传输。WCF本质上是一个消息处理框架,作为整个消息交换系统的两个终端,即发送端和接收端。换句话说,WCF仅仅负责对消息的发送和接收,一旦消息通过WCF的信道层进入了网络,就脱离了WCF的控制范围。但是,由于网络环境的限制,网络层不能百分之百地确保对消息的有效交付。如何克服中间环节的制约,确保从一端发送的消息能够被有效地交付给另一端,这就是可靠消息传输(Reliab

  • 腾讯云物联网通信获取设备列表物联网通信API20180614

    1.接口描述接口请求域名:iotcloud.tencentcloudapi.com。 本接口(DescribeDevices)用于查询物联网通信设备的设备列表。 默认接口请求频率限制:100次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:DescribeDevices。 Version 是 String 公共参数,本接口取值:2018-06-14。 Region 否 String 公共参数,本接口不需要传递此参数。 ProductId 是 String 需要查看设备列表的产品ID Offset 是 Integer 偏移量,Offset从0开始 Limit 是 Integer 分页的大小,数值范围10-250 FirmwareVersion 否

  • 【管理心得之六十一】把好质量关是靠过程,而非人

    场景再现 ================== 项目经理{甲}:唉……… 项目经理{乙}:怎么了,看你刚刚从CIO办公室出来,难不成遇到麻烦了? 项目经理{甲}:CIO让我们给他演示一下新的语音邮件软件。 项目经理{乙}:这不应该是问题,全公司的语音邮件软件升级项目一直是由你们在搞,再熟悉不过了。 项目经理{甲}:我也是这样想的,但我们去他办公司的时候,真没有想到,系统竟然不能正常运行!这不刚刚出来就看见你了,不得不半小时后再次去他的办公司完成演示。 项目经理{乙}:现在当务之急是把问题查清楚。 项目经理{甲}:CIO很喜欢这个新系统,但我不知道他对我们的安装能力是否还充满信心。 项目经理{乙}:“天空飘过五个字,那都不是事”,今后在项目中严把质量关,应该问题不大。 项目经理{甲}:说真心话,这事一出,我对团队成员后期的表现真不看好。 ================== 说句心里话,我是真为这位{项目经理甲}感到遗憾,明明是一次展现自己的机遇,是一次把项目成功结果展现给上级的机会,却成为一次尴尬的收场。换做是谁,可能都无法原谅自己对质量的轻视。至于结尾双方谈到质量话题,很多人都在纠结

  • DM 记不清台词导致的后果

    ​ 我所居住的城市中,座落着一家吧厅。 ​ 吧厅并没有令人神迷的华丽,但却装修得细致入微,乡村小屋式的建筑带来了惬意和轻松,流过旁边的空气都似乎染上了静谧和芳香。 ​ 朴素而干净的石制屋顶和桦木横梁下,是宽敞的大堂。中央的火炉照耀着木桌的表面,前来对弈的客人也能感受到焰火的温暖。 ​ 长椅间便是中央吧台。这里摆放着琳琅满目的物件,有精致的巨龙棋、闪烁的金奖杯,还有吧厅老板自己的照片。 ​ 老板拉塞尔是一位和蔼亲切的人类。听说因为某种意外,他丧失了自己的妻子,为了从悲伤中挣脱出来,他修建了这家吧厅,过着平淡而闲适的生活。 ​ 一般,拉塞尔都会坐在中央吧台后面,经营着吧厅的生意。 ​ 可能今天的吧厅很热闹,客人进出不停、生意昌隆,拉塞尔忙前忙后,有礼地为客人倒上盏盏清茶。 ​ 可能今天的吧厅很冷清,只有常驻的老顾客们在进行对弈,拉塞尔微笑着注视他们,似乎在欣赏棋子落下棋盘的清脆响声。 ​ 我也经常会过来这边,有时是找客人下棋,但更多时候是坐在吧台前面,和拉塞尔聊天。边喝着滋润喉咙的饮品,边和拉塞尔谈天说地,交流着城中的大小人物、打听着城中的逸事情报,真是惬意到了极点。 ​ 这一天,我需要

  • 排球程序计分员

    需求:作为一名现场记分员,我希望详细记录比赛现场比分增长情况,以便观众及运动员、教练员及时掌握比赛状况。(满意条件:每一次比分的改变,都要形成一条记录)。   计划:估计此次工作需要一周的时间。   需求分析:根据用户需求可知我们此次程序需要做到每次分数变化的时候都要记录。当记分员操作之后就要形成记录。   设计文档: 根据《2015-2016赛季中国排球联赛竞赛规程》,计分规则如下: 1、目前的排球比赛采用五局三胜制。前四局每局25分,每局比赛完成后交换场地,达到24分时,必须比赛的双方相差2分才能分出胜负;决胜局为15分,比赛的双方任何一方先达到8分时,交换场地继续比赛,当双方同时达到14分时候,也是必须相差两分才能决出胜负。排球计分的发展历程:1917年规定每局为15分。1918年规定上场运动员每队为6人。1922年规定每方必须在3次以内将球击过网。比赛方法以前采用发球得分制,1998年10月28日国际排联决定改为每球得分制,仍为五局三胜,前四局每局先得25分者为胜,第五局先得15分者为胜,若出现24平或14平时,要继续比赛至某队领先2分才能取胜。

  • nrm ls后报错 throw new ERR_INVALID_ARG_TYPE(name, &#39;string&#39;, value);

       解决方法: C:\Users\xuefen.lv\AppData\Roaming\npm\node_modules\nrm\cli.js的第17行 注释并修改为如下 const NRMRC =path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');  

  • 软件工程03

    这个作业属于哪个课程https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494 这个作业的目标 数独 作业正文 如下 其他参考文献 很多……忘存     1.Github项目地址 https://github.com/EosXiao/20177674_ 2.PSP表格 PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实际耗时(分钟) Planning 计划         30         50 Estimate 估计这个任务需要多少时间  1000+  180

  • 基于mybatis-generator-core 1.3.5项目的修订版以及源码剖析

    项目简单说明 mybatis-generator,是根据数据库表、字段反向生成实体类等代码文件。我在国庆时候,没事剖析了mybatis-generator-core源码,写了相当详细的中文注释,可以去看看。目前我剖析修改的是1.3.5版本。 在原版本的基础上,增加批量增加、修改的操作,增加统一模块生成,并且 生成的代码,支持最新的阿里巴巴java规范。 源码剖析说明 1.剖析org.mybatis.generator.plugins.ToStringPlugin源码2.剖析org.mybatis.generator.plugins.MapperConfigPlugin源码3.剖析org.mybatis.generator.api.ShellRunner源码,Main入口3.剖析org.mybatis.generator.config.xml.ConfigurationParser源码,配置解析器,用于对generatorConfig.xml配置文件的解析4.剖析org.mybatis.generator.config.Context源码,封装元素内容 修改源码说明(原版本没有

相关推荐

推荐阅读