2016-11-01 6 views
0

を構築するポストで動作するようには思えない私は、次のように豆の順序を指定するには、春SmartLifeCycleを使用しています:春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が構築されているように見えます。これはアプリケーションの起動に失敗する原因となります。

これを修正して注文を正しく指定するにはどうすればよいですか?私はこれを間違って使用していますか?

答えて

0

getPhase()メソッドがありません。これは、Beanがインスタンス化される順序を制御するために使用されます。シャットダウン中は、順序が逆になります。

明示的なフェーズを持たないBeanは、フェーズ0(最も一般的)に割り当てられるか、Springによってフェーズが指定されます(JMSリスナーのようにSpringによって管理されるもの)。

明示的にフェーズを割り当てない限り、Springは「最良の推測」を行い、望ましい結果を得られない可能性があります。

@Override 
public int getPhase() { 
    return 1; 
}