1.配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName"
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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--扫描项目实例化@Component,@Service,@Controller修饰的类-->
<context:component-scan base-package="com.your_app" />
<task:annotation-driven /> <!--允许@Async-->
</beans>
2.写异步类
@Component
public class MqManageAsynController {
private static Logger LOGGER = LoggerFactory.getLogger(MqManageAsynController.class);
@Async //异步标签
public void testAsyn(){
long time = System.currentTimeMillis();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.err.println("异步执行完毕:"+(System.currentTimeMillis()-time));
}
}
3.调用异步方法的类
@Service //Component Service Controller在Spring 3.2中是等价的
class ClassA{
@Autowired
MqManageAsynController mqManageAsynController ; // 实例的名字必须和类名完全一样,然后首字母小写
public testAsync(){
mqManageAsynController.testAsyn();
LOGGER.info("同步执行完毕:" + System.currentTimeMillis());
}
}
注意:异步方法和调用异步的方法不能在同一个类中!