2016-05-16 5 views
-1

私はいくつかの他のJavaプロセスを起動するJavaプロセスを持っています。サービスは、私が継続的に実行されてROCServerEntrypointを必要とする継続的に実行するためにはJavaプロセスを継続的に実行するためのSpring機能

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; 
     } 
    } 
    } 

。 これらの2つのアプローチを試してみました。

  1. ROCServerEntrypointをスレッドとして開始します。
  2. もっと無神経で、無限ループを実行します。

また、Springにこれに対応するクリーナーソリューションがあるかどうか疑問に思うかもしれません。

+0

スプリングブートを使用しますか? – chrylis

+0

はいスプリングブーツを使用しています。しかし、どのように正確に見つけることができませんでした。デフォルトでは、プロセスは終了します。 –

+0

HTTPやMQエンドポイントなどの長期実行サービスはありませんか?これらのサービスは外部とどのように通信していますか? – chrylis

答えて

-2

追加情報がない場合、最良の方法は、Thread.sleepの無限ループを使用し、各睡眠後にハートビートを印刷することです。

プロジェクトに他の依存関係がない場合は、無限ループを取り除くためだけにスプリングを追加する必要はありません。

+0

すでに私の質問で私はこれをしたくないと指摘しました。 –

+0

良い方法があるかどうか試してみたと書いてあります。私は清潔な方法がないと言っている。 –

関連する問題