下面列出了怎么用org.springframework.scheduling.annotation.AsyncConfigurer的API类实例代码及写法,或者点击链接到github查看源代码。
@Bean
public AsyncConfigurer asyncConfigurer() {
AsyncUncaughtExceptionHandler handler = new SimpleAsyncUncaughtExceptionHandler();
return new AsyncConfigurer() {
@Override
@SneakyThrows
public Executor getAsyncExecutor() {
return threadPoolTaskExecutor().getObject();
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return handler;
}
};
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof AsyncConfigurer && !(bean instanceof TracedAsyncConfigurer)) {
AsyncConfigurer configurer = (AsyncConfigurer) bean;
Tracer tracer = this.beanFactory.getBean(Tracer.class);
return new TracedAsyncConfigurer(tracer, configurer);
}
return bean;
}
@Test
public void should_return_async_configurer_when_bean_instance_of_it() {
BeanFactory beanFactory = mock(BeanFactory.class);
when(beanFactory.getBean(Tracer.class)).thenReturn(new MockTracer());
CustomAsyncConfigurerAutoConfiguration configuration = new CustomAsyncConfigurerAutoConfiguration();
configuration.setBeanFactory(beanFactory);
Object bean = configuration
.postProcessAfterInitialization(mock(AsyncConfigurer.class), "myAsync");
then(bean).isInstanceOf(TracedAsyncConfigurer.class);
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if (bean instanceof AsyncConfigurer
&& !(bean instanceof LazyTraceAsyncCustomizer)) {
AsyncConfigurer configurer = (AsyncConfigurer) bean;
return new LazyTraceAsyncCustomizer(this.beanFactory, configurer);
}
return bean;
}
@Test
public void should_return_lazy_async_configurer_when_bean_is_async_configurer()
throws Exception {
AsyncCustomAutoConfiguration configuration = new AsyncCustomAutoConfiguration();
Object bean = configuration
.postProcessAfterInitialization(mock(AsyncConfigurer.class), "someName");
then(bean).isInstanceOf(LazyTraceAsyncCustomizer.class);
}
@Bean
public AsyncConfigurer customAsyncConfigurer() {
return new AsyncConfigurerSupport() {
@Override
public Executor getAsyncExecutor() {
return new SimpleAsyncTaskExecutor("customAsyncConfigurer");
}
};
}
public TracedAsyncConfigurer(Tracer tracer, AsyncConfigurer delegate) {
this.tracer = tracer;
this.delegate = delegate;
}
public LazyTraceAsyncCustomizer(BeanFactory beanFactory, AsyncConfigurer delegate) {
this.beanFactory = beanFactory;
this.delegate = delegate;
}