我想在一个抽象类中使用一个@Async
方法,但似乎不起作用(如果我放一些日志,它是同一线程)。
public abstract class MyAbstractClass {
...
@Async
public final void someAsyncTask() {
...
}
public abstract void doMyStuff();
}
@Service
public class MyClass extends MyAbstractClass {
...
@Override
public void doMyStuff() {
...
}
}
@Component
public class Initializer {
@Autowired
private MyClass myClass;
@PostConstruct
public void init() {
// This call is NOT async
myClass.someAsyncTask();
}
}
@Configuration
@EnableAsync
public class SpringAsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
...
return threadPoolTaskExecutor;
}
}
如果@Async
方法直接位于MyClass内部(不再扩展MyAbstractClass,因为它现在已不再有用):它将起作用!
有人建议@Async
为何不能在抽象类中使用吗?
我正在使用SpringBoot 2.1.3.RELEASE
答案 0 :(得分:0)
这是因为someAsyncTask
是final
。
这是防止此方法对@Override
不利的最终手段。
这样做并保留@Async
似乎是不可能的。
感谢@Deadpool的帮助!