SpringBoot——任务

任务

1、异步任务

同步任务就是,A调用了B方法,必须要得B执行完了之后才能执行,如果B方法执行的很慢,A页必须等待。

鉴于这种方法有时候会很低效,所以就有了异步执行,A调用B方法之后,会再开一个线程去执行B,不会影响A的执行。

在SpringBoot中要想实现异步任务十分简单,接下来我们先写一个不是异步方法的代码,

@Service
public class AsyncService {
  
    public void hello() throws InterruptedException {
        Thread.sleep(5000);	//测试方法,我们让线程失眠5秒
        System.out.println("处理数据中...");
    }

}

编写controller层如下:

@RestController
public class AsyncController {

    @Autowired
    AsyncService asyncService;

    @GetMapping("/hello")
    public String hello() throws InterruptedException {
        asyncService.hello();	//调用同步方法
        return "hello";
    }

}

运行项目,在浏览器中输入 http://localhost:8080/hello ,可以看到在过了 5 秒之后才会输出 hello

现在我们来更改 AsyncService.java 中的代码:

@Service
public class AsyncService {
    //告诉Spring这是一个异步方法
    @Async
    public void hello() throws InterruptedException {
        Thread.sleep(5000);
        System.out.println("处理数据中...");
    }
}

并且在 UmserverApplication.java 中开启异步注解:

@SpringBootApplication
@EnableAsync
public class UmserverApplication {

	public static void main(String[] args) {
		SpringApplication.run(UmserverApplication.class, args);
	}

}

再次执行,就可以马上看到 hello ,但是在 5 秒之后控制台输出 处理数据中...

1.1 配置

如果你在 context 中定义了一个 Executor ,那么异步任务就会使用它。

线程池使用8个核心线程,当然也会根据任务的多少增加或者减少。这些默认的配置能够使用 spring.task.execution 命名空间来调整,例如:

spring.task.execution.pool.max-size=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s

上面的配置使线程池使用了一个受限的 queue ,当 queue 满的时候(达到了100个任务),线程数就会增加,但是最大也只会到 16 个。线程空闲10 秒(而不是默认的 60 秒)时,线程就会被回收。

2、定时任务

要使用定时任务也是十分的简单,如下:

在方法上添加上 @Scheduled 注解,

@Service
public class MailSend {
  	/*cron的详细配置请看下面*/
    @Scheduled(cron = "0-4 * * * * 1-6")
    public void hello() throws InterruptedException {
        System.out.println("hello...");
    }
}

并且在 UmserverApplication.java 中添加上 @EnableScheduling 注解即可。

@SpringBootApplication
@EnableAsync
@EnableScheduling
public class UmserverApplication {

	public static void main(String[] args) {
		SpringApplication.run(UmserverApplication.class, args);
	}

}

启动项目后,在每分钟的 0-4 秒时控制台会打印 hello...

关于 cron 的值:

字段允许值允许的特殊字符
0-59, - * /
0-59, - * /
小时0-23, - * /
日期1-31, - * ? / L W C
月份1-12, - * /
星期1-7, - * ? / L C #
特殊字符代表含义
,枚举
-区间
*任意
/步长
?日/星期冲突匹配
L最后
W工作日
C和calendar联系后计算过的值
#星期, 4#2 ,第2个星期四
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值