测试代码:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/spring/*.xml" })
public class JobUtilsTest{
@Autowired
private DaoService service;
@Test
public void testAsync() throws Exception {
System.out.println("start" );
service.update(); // ★ 假设这个方法会比较耗时,需要异步执行
System.out.println("end");
Thread.sleep(3000); // 因为junit结束会结束jvm,所以让它等会异步线程
}
}
DaoService代码:
@Service
public class DaoService {
@Async
public void update() {
try {
Thread.sleep(2000);
// do something
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("operation complete.");
}
}
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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<context:component-scan base-package="com.chinacache" />
<task:annotation-driven />
</beans>
输出结果:
start
end
operation complete.
可以看出,输出不是顺序执行,说明异步调用成功了。
分享到:
相关推荐
`@Async`用于标记一个方法为异步执行,而`@EnableAsync`则启用异步方法的支持。这两个注解配合使用,可以让开发者轻松地将方法转换为异步执行,提高系统的并行处理能力。 此外,`@Scheduled`注解用于定义定时任务,...
`@Async`注解支持异步方法执行,增强了并发处理能力。Spring 3.0还引入了Portlet MVC,加强了与portlet应用的集成。 3. **Spring 3.1** 在Spring 3.0的基础上进行了优化和增强,其中最显著的是对资源处理的支持。`...
8. **工具和框架**:在实际开发中,可以利用一些工具和框架来简化线程管理,例如Spring框架中的@Async注解,用于异步执行方法,提升应用性能。 9. **源码分析**:阅读和理解JDK中Thread类和其他相关类的源码,有助...
- 结合实际项目,探讨Spring框架在解决具体问题时的最佳实践,如使用 Profiles 进行环境配置,使用 @Async 实现异步任务,以及如何利用 Spring Security 提供安全防护。 通过深入学习Spring 5.2.11.RELEASE源码,...
17、**Promise**:在Vue3中,Promise用于处理异步操作,与async/await配合构建更简洁的异步代码。 18、**Vue3与Vue2的差异**:对比Vue3和Vue2在模板语法、响应式系统、组件API等方面的改进。 19、**Vue3自定义插件...
2. 异步处理:使用@Async注解实现Controller方法的异步执行,提高系统响应速度。 3. AOP切面编程:利用Spring的AOP功能,实现全局异常处理、事务管理等。 4. RESTful设计:遵循RESTful原则设计API,使服务更加清晰、...
- 使用`@Async`注解配合`@EnableAsync`开启Spring的异步支持。 **BUG分析及解决套路:** - 定位问题:通过日志、调试等方式找到问题根源。 - 分析原因:理解出错逻辑,分析错误原因。 - 修复并验证:修改代码,测试...
10. **异步编程**:C#引入了async和await关键字,支持异步编程模型,提高程序的响应性和性能,尤其是在I/O密集型任务中。 11. **委托与事件**:委托是C#中的类型,可以存储指向方法的引用。事件是基于委托的通信...
JavaScript是一种广泛使用的编程语言,主要用于Web开发,它允许在浏览器端执行代码,提供交互式的网页体验。JavaScript可以用于处理用户输入、动态更新内容、创建动画效果、实现Ajax(异步JavaScript和XML)通信,...
在这个项目中,开发者可能使用了Spring MVC或Spring Boot来构建RESTful API,这些API能接收前端小程序的请求,执行相应的业务逻辑,并返回数据。 3. **数据库管理**:为了存储用户的笔记信息,后端通常会连接到一个...
9. 并发与异步编程:C#提供了async/await关键字,使并发和异步编程变得更加简单和直观,这对于多线程和UI更新尤其重要。 10. .NET框架与.NET Core:.NET框架是C#的传统运行环境,而.NET Core是跨平台的现代化版本,...
6. **异步编程**:C# 5.0引入了异步编程模型,使用async和await关键字,使得编写非阻塞I/O操作变得简单。 7. **事件和委托**:C#支持事件处理,常用于用户界面编程,而委托是事件处理的基础,是一种类型安全的函数...
3. **JavaScript进阶**:深入理解DOM操作、事件处理、异步编程(Promise和async/await),以及可能涉及到的库和框架如jQuery。 4. **PHP7基础与进阶**:学习变量、控制结构、函数、类和对象,以及如何与MySQL数据库...