2016-05-16 30 views
-1

我有一個java進程啓動其他幾個java進程。春季設施,以保持java進程連續運行?

public class ROCServerEntrypoint { 
    public static void main(String[] args) { 
    AnnotationConfigApplicationContext annContext = new AnnotationConfigApplicationContext(); 
    BeanConfigRegisterUtil.util.registerBeanConfig(annContext); 
    ServiceInitUtil.util.initServerServices(annContext); 
    } 
} 

public class ServiceInitUtil { 
    public static ServiceInitUtil util = new ServiceInitUtil(); 
    private AnnotationConfigApplicationContext context; 
    private Logger logger = LoggerFactory.getLogger(ServiceInitUtil.class); 

    public void initServerServices(AnnotationConfigApplicationContext context) { 
    this.context = context; 
    context.refresh(); 
    startServices(new ArrayList<Service>(fetchRegisteredServices())); 
    } 

    private Collection<Service> fetchRegisteredServices() { 
    return context.getBeansOfType(Service.class).values(); 
    } 

    private void startServices(List<Service> registeredServices) { 
    Collections.sort(registeredServices, new ServiceOrderComparator()); 
    logger.info(">Initiating services..."); 
    for (Service service : registeredServices) { 
     logger.info(">Starting service - " + service.getClass().getSimpleName()); 
     if (!service.start()) { 
     logger.info(">Failed to start service - " + service.getClass().getSimpleName()); 
     logger.info(">Initiating shutdown..."); 
     shutDown(service, registeredServices); 
     break; 
     } else { 
     logger.info(">Successfully started service - " + service.getClass().getSimpleName()); 
     } 
    } 
    } 

    private void shutDown(Service failedService, List<Service> registeredServices) { 
    for (Service service : registeredServices) { 
     if (!service.equals(failedService)) { 
     logger.info(">Shutting down service - " + service.getClass().getSimpleName()); 
     service.shutDown(); 
     } else { 
     break; 
     } 
    } 
    } 

爲了使服務連續運行,我需要ROCServerEntrypoint進行連續運行。 試過這兩種方法。

  1. 將ROCServerEntrypoint作爲線程啓動。
  2. 更天真的是,運行一個無限循環。

或者,想知道Spring是否有一些更乾淨的解決方案。

+0

使用Spring Boot? – chrylis

+0

是使用彈簧引導。但是找不到如何。默認情況下,該進程退出。 –

+0

因此,您沒有任何長期運行的服務,例如HTTP或MQ端點?這些服務如何與外界溝通? – chrylis

回答

-2

沒有其他信息,最好的方法是使用Thread.sleep的無限循環,並在每次睡眠後打印心跳。

如果您在項目中沒有任何其他依賴項,那麼爲了擺脫無限循環而添加spring並沒有意義。

+0

已經在我的問題中指出我不想這樣做。 –

+0

你寫道,你試過並想知道是否有更好的方法。我說的是沒有更簡潔的方法。 –