Spring @Async 异步任务调用
spring-4.0.3.RELEASE, quartz-2.2.1
1.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <import resource="applicationContext-task.xml"/> <context:component-scan base-package="com.jin" /> </beans>
2.applicationContext-task.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> <task:annotation-driven executor="taskExecutor" scheduler="taskScheduler"/> <task:executor id="taskExecutor" pool-size="5"/> <task:scheduler id="taskScheduler" pool-size="10" /> </beans>
3.异步执行方法:
package com.jin.service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class AsynTaskSample {
@Async
public void doSomething() throws Exception
{
Thread.sleep(5000L);
System.out.println("begin Async doSomething is invoked!");
Thread.sleep(5000L);
System.out.println("end Async doSomething is invoked!");
}
}
4.调用异步方法
package com.jin.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class AsynTaskTest {
@Autowired
private AsynTaskSample asynTaskSample;
public void service() throws Exception
{
System.out.println("start do some service!");
asynTaskSample.doSomething();
System.out.println("end do some service!");
}
}
5.测试
package com.jin;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.jin.service.AsynTaskTest;
public class ClientMain {
public static void displayAllBean(ApplicationContext context)
{
String[] beans = context.getBeanDefinitionNames();
for(String bean : beans)
System.out.println(bean);
}
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
AsynTaskTest a = context.getBean(AsynTaskTest.class);
a.service();
}
}
6.输出结果:并不按方法执行的顺序输出
start do some service!
end do some service!
begin Async doSomething is invoked!
end Async doSomething is invoked!