2012-10-24 33 views
0

我創建了一個迷你框架來執行main()方法中的一些spring bean,而不是部署和運行全功能的webapp來啓動這些bean。它看起來像這樣:使用Spring上下文的命令行應用程序永不結束

public abstract class BaseLauncher { 

    private static final String APP_CONTEXT_PATH = "com/project/dev/launchers/launchersApplicationContext.xml"; 
    static ApplicationContext context = new ClassPathXmlApplicationContext(APP_CONTEXT_PATH); 

    protected void launch() { 
     context.getBean(getClass()).perform(); 
     //The process never ends so we want to know when we can kill it 
     System.out.println("launcher finished"); 
    } 

    @Transactional 
    abstract protected void perform(); 

} 

而且例如發射器看起來是這樣的:

@Component 
public class ParamLoaderLauncher extends BaseLauncher { 
    @Inject 
    ParamLoader paramLoader; 

    public static void main(String[] args) { 
     new ParamLoaderLauncher().launch(); 
    } 

    @Override 
    protected void perform() { 
     paramLoader.loadParams(); 
    } 
} 

它所有的工作,除了偉大的,當被調用Bean方法完成時,應用程序只是不停地運行,我們需要將其殺死手動。我想這與使用spring應用上下文有關。也許有一些特殊的春天相關的非deamon線程啓動?如果是這樣,有什麼辦法殺死它?或者在這樣簡單的代碼中可能有什麼其他原因?

回答