Spring高级运用之浅析多线程与计划任务
2017-02-15 14:19
369 查看
Spring对多线程的支持:
Spring通过任务调度器(TaskExecutor)来实现多线程和并发编程,使用ThreadPoolTaskExecutor可以实现一个基于线程池的TaskExecutor。而在实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync开启对异步任务的支持,并且通过在实际开发执行的Bean的方法中使用@Async注解来声明其是一个异步任务。
创建配置类:
创建实体类:
创建测试类
Spring对于计划任务的支持:
从Spring3.1开始,计划任务在Spring中的实现变得异常的简单。首先通过在配置类上注解@EnableScheduling来开启对于计划任务的支持,然后在要执行的计划任务的方法上提供@Scheduled的注解,声明这个是计划任务
定义配置类:
定义计划任务类:
运行:
Spring通过任务调度器(TaskExecutor)来实现多线程和并发编程,使用ThreadPoolTaskExecutor可以实现一个基于线程池的TaskExecutor。而在实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync开启对异步任务的支持,并且通过在实际开发执行的Bean的方法中使用@Async注解来声明其是一个异步任务。
创建配置类:
@Configuration @ComponentScan("com.fuyunwang.taskexecutor") @EnableAsync //开启异步任务的支持 public class TaskExecutorConfig implements AsyncConfigurer { //得到基于线程池的TaskExecutor public Executor getAsyncExecutor() { ThreadPoolTaskExecutor taskExecutor=new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(5); taskExecutor.setMaxPoolSize(10); taskExecutor.setQueueCapacity(25); taskExecutor.initialize(); return taskExecutor; } }
创建实体类:
@Service public class AsyncTaskService { @Async//标记指定的方法是个异步方法 public void executeAsyncTask(Integer i){ System.out.println("异步执行任务:"+i); } @Async public void executeAsyncTaskPlus(Integer i){ System.out.println("异步执行任务+1:"+(i+1)); } }
创建测试类
public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskExecutorConfig.class); AsyncTaskService service=context.getBean(AsyncTaskService.class); for(int i=0;i<10;i++){ service.executeAsyncTask(i); service.executeAsyncTaskPlus(i); } context.close(); } }
Spring对于计划任务的支持:
从Spring3.1开始,计划任务在Spring中的实现变得异常的简单。首先通过在配置类上注解@EnableScheduling来开启对于计划任务的支持,然后在要执行的计划任务的方法上提供@Scheduled的注解,声明这个是计划任务
定义配置类:
@Configuration @ComponentScan("com.fuyunwang.scheduler") @EnableScheduling public class TaskSchedulerConfig { }
定义计划任务类:
@Service public class ScheduledTaskService { private static final SimpleDateFormat dateFormat=new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate=5000) //通过Scheduled来声明这个方法是计划任务,fixedRate属性指定每隔固定的时间执行指定的方法 public void reportCurrentTime(){ System.out.println("每隔5秒执行一次:"+dateFormat.format(new Date())); } @Scheduled(cron="0 28 11 ? * *") //cron属性是按照指定的事件执行,cron是UNIX和类UNIX系统下的定时任务 public void fixTimeExecution(){ } }
运行:
public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext configApplicationContext=new AnnotationConfigApplicationContext(TaskSchedulerConfig.class); } }
相关文章推荐
- 三-Spring高级话题(1)-多线程、计划任务-【JavaEE开发的颠覆者】
- SpringBoot4-spring高级话题-spring aware,多线程,计划任务,条件注解@Conditional
- spring boot-高级话题之 多线程、@EnableScheduling开启计划任务的支持(2)
- 【Spring】Spring高级话题-计划任务-@EnableScheduling
- Spring高级话题-计划任务-@EnableScheduling
- Spring高级运用之浅析Spring Aware
- 【Spring】Spring高级话题-计划任务-@EnableScheduling
- spring任务计划
- 使用Spring来实现任务计划服务二:不继承java.util.TimerTask
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- 使用Spring来实现任务计划服务三:集成quartz任务调度框架
- 在Web应用程序中执行计划任务(多线程)
- spring 任务计划MethodInvokingJobDetailFactoryBean动态cronExpression的配置介绍
- asp.net 计划任务管理程序实现,多线程任务加载
- 关于在Spring中的任务计划的使用
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 在Web应用程序中执行计划任务(多线程)
- 在Web应用程序中执行计划任务(多线程)
- Spring中使用任务计划 推荐