本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。
传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q公司主营业务:成都网站建设、做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出海城免费做网站回馈大家。
异步用法
@EnableAsync 注解
@Async 注解
明确指定执行器
管理 @Async 的异常
@EnableAsync注解要使用 @Async,首先需要使用 @EnableAsync注解开启 Spring Boot 中的异步特性。
@Configuration
@EnableAsync
public class AppConfig {
}更详细的配置说明,可以参考:AsyncConfigurer
@Async注解(1)无入参无返回值方法
您可以用 @Async注解修饰方法,这表明这个方法是异步方式调用。换句话说,程序在调用此方法时会立即返回,而方法的实际执行发生在已提交给 Spring TaskExecutor的任务中。在最简单的情况下,您可以将注解应用于返回 void 的方法,如以下示例所示:
@Async
void doSomething() {
// this will be executed asynchronously
}(2)有入参无返回值方法
与使用 @Scheduled注释注释的方法不同,这些方法可以指定参数,因为它们在运行时由调用者以“正常”方式调用,而不是由容器管理的调度任务调用。例如,以下代码是 @Async注解的合法应用:
@Async
void doSomething(String s) {
// this will be executed asynchronously
}(3)有入参有返回值方法
甚至可以异步调用返回值的方法。但是,这些方法需要具有 Future类型的返回值。这仍然提供了异步执行的好处,以便调用者可以在调用 Future上的 get()之前执行其他任务。以下示例显示如何在返回值的方法上使用@Async:
@Async FuturereturnSomething(int i) { // this will be executed asynchronously }
@Async不能与生命周期回调一起使用,例如 @PostConstruct。
要异步初始化 Spring bean,必须使用单独的初始化 Spring bean,然后在目标上调用 @Async带注释的方法,如以下示例所示:
public class SampleBeanImpl implements SampleBean {
@Async
void doSomething() {
// ...
}
}
public class SampleBeanInitializer {
private final SampleBean bean;
public SampleBeanInitializer(SampleBean bean) {
this.bean = bean;
}
@PostConstruct
public void initialize() {
bean.doSomething();
}
}默认情况下,在方法上指定 @Async时,使用的执行器是在启用异步支持时配置的执行器,即如果使用 XML 或 AsyncConfigurer实现(如果有),则为“annotation-driven”元素。但是,如果需要指示在执行给定方法时应使用默认值以外的执行器,则可以使用 @Async注解的 value 属性。以下示例显示了如何执行此操作:
@Async("otherExecutor")
void doSomething(String s) {
// this will be executed asynchronously by "otherExecutor"
}在这种情况下,“otherExecutor”可以是 Spring 容器中任何 Executor bean 的名称,也可以是与任何 Executor 关联的限定符的名称(例如,使用 元素或 Spring 的 @Qualifier注释指定) )。
@Async的异常当 @Async方法的返回值类型为 Future型时,很容易管理在方法执行期间抛出的异常,因为在调用 get结果时会抛出此异常。但是,对于返回值类型为 void 型的方法,异常不会被捕获且无法传输。您可以提供 AsyncUncaughtExceptionHandler来处理此类异常。以下示例显示了如何执行此操作:
public class MyAsyncUncaughtExceptionHandler implements AsyncUncaughtExceptionHandler {
@Override
public void handleUncaughtException(Throwable ex, Method method, Object... params) {
// handle exception
}
}默认情况下,仅记录异常。您可以使用 AsyncConfigurer或 XML元素定义自定义 AsyncUncaughtExceptionHandler。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。