抽象类中的异步方法

时间:2019-07-30 12:45:10

标签: java spring-boot abstract

我想在一个抽象类中使用一个@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

1 个答案:

答案 0 :(得分:0)

这是因为someAsyncTaskfinal

这是防止此方法对@Override不利的最终手段。

这样做并保留@Async似乎是不可能的。

感谢@Deadpool的帮助!