我使用Spring指定SmartLifeCycle顺序,如下所示:
public class MyBean implements SmartLifecycle {
@PostConstruct
public void init() {
//Do stuff
}
private boolean isRunning = false;
@Override
public boolean isAutoStartup() {
LOGGER.warn("************** is autostartp");
return true;
}
@Override
public void stop(final Runnable callback) {
stop();
callback.run();
}
@Override
public void start() {
LOGGER.warn("************** start ");
isRunning = true;
}
@Override
public void stop() {
LOGGER.warn("************** stop");
isRunning = false;
}
@Override
public boolean isRunning() {
LOGGER.warn("************** is running" + isRunning);
return isRunning;
}
@Override
public int getPhase() {
LOGGER.warn("************** phase " + (Integer.MIN_VALUE));
return Integer.MIN_VALUE;
}
}订单似乎运行不正确。所有的bean似乎都是在考虑阶段之前就构建好的,这导致应用程序无法启动。
我如何解决这个问题并正确地指定顺序?我是不是用错了?
发布于 2017-01-04 06:54:36
看起来您缺少getPhase()方法。这用于控制bean实例化的顺序。在关闭过程中,顺序颠倒。
任何没有显式阶段的bean要么被分配到阶段0(最常见),要么被Spring赋予一个阶段(如果它是由Spring管理的东西,比如JMS侦听器)。
除非您显式地指定一个阶段,否则Spring将做出“最佳猜测”,这可能不会产生所需的结果。
@Override
public int getPhase() {
return 1;
}https://stackoverflow.com/questions/40366601
复制相似问题