콩을 실행하기 위해 완전한 웹 응용 프로그램을 배포하고 실행하지 않고 main()
메서드에서 일부 스프링 빈을 실행하기위한 미니 프레임 워크를 만들었습니다. 그것은 다음과 같습니다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();
}
}
그것은 모두가 호출 된 빈 메소드가 완료되면, 응용 프로그램 만 계속 실행 것을 제외하고 잘 작동하고 우리가 그것을 죽일 필요 수동으로. 나는 그것이 스프링 애플 리케이션 컨텍스트를 사용하는 것과 관련이 있다고 생각한다. 아마도 특별한 스프링 관련 non-deamon 쓰레드가 시작되었을지도 모르겠다. 그렇다면, 그것을 죽일 방법이 있습니까? 아니면 이와 같은 간단한 코드에 다른 원인이있을 수 있습니까?