2014-06-08 3 views
1

내 클라이언트가 독립 실행 형 응용 프로그램에서 사용하는 간단한 API가 있습니다. 배후에서 나의 API는 성능을 위해 Ehcache를 사용합니다.독립 실행 형 응용 프로그램에서 Ehcache CacheManager를 종료하는 방법

내 클라이언트가 내 스레드에서 shutdown() 메서드를 호출하여 CacheManager.shutdown()을 호출해야합니다.이 경우 메인 스레드가 완료 되어도 Ehcache가 백그라운드에서 계속 실행되지 않습니다.

내 고객을위한이 추가 shutdown() 전화를 피할 수있는 방법이 있습니까?

@PreDestroy Spring annotation을 사용하여이 호출을 시도했지만 작동하지 않았습니까?

예제 클라이언트 프로그램을 추가하고 있습니다.

public class ClientApp{ 
    @Autowired 
    private IClientService service; 

    public static void main(String[] args){ 
     try{ 
      service.getClients(); 
      ... 
     } finally { 
      service.shutdown(); // to shutdown the cache background thread 
     } 
    } 
} 

는 ClientServiceImpl.java, 나는 다음과 같은 라인

public void shutdown(){ 
    LOGGER.info("Shutting the cache down..."); 
    ehcacheManager.shutdown(); 
} 
+0

안녕하십니까, 애플리케이션에서 API의 수명주기를 설명하지 않으므로 언급하기가 어렵습니다. 그 정보를 질문에 추가 할 수 있습니까? –

+0

감사합니다. @LouisJacomet. 나는 샘플 프로그램을 추가했다. 보시다시피, 내 고객은 명시 적으로'shutdown()'을 호출해야했습니다. IClientService 구현은 Spring을 통해 자동 실행됩니다. – MFIhsan

답변

1

다음 행을 추가하면 내가 찾고있는 것이됩니다.

System.setProperty(CacheManager.ENABLE_SHUTDOWN_HOOK_PROPERTY, "true"); 
1

귀하의 예는 독립 실행 형 응용 프로그램의 설정을 확인해야합니다. Ehcache는 주 스레드가 종료 될 때 JVM이 종료되지 않도록해야합니다.

만약 그렇다면 문제와 그 원인을 더 자세히 분석 할 수 있도록이 문제에 스레드 덤프를 추가해야합니다.

관련 문제