保持java进程连续运行的Spring工具?

保持java进程连续运行的Spring工具?,java,spring,Java,Spring,我有一个java进程可以启动其他几个java进程 public class ROCServerEntrypoint { public static void main(String[] args) { AnnotationConfigApplicationContext annContext = new AnnotationConfigApplicationContext(); BeanConfigRegisterUtil.util.registerBeanConfig(an

我有一个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{
公共静态void main(字符串[]args){
AnnotationConfigApplicationContext annContext=新的AnnotationConfigApplicationContext();
BeanConfigRegisterUtil.util.registerBeanConfig(annContext);
ServiceInitUtil.util.initServerServices(annContext);
}
}
公共类ServiceInitUtil{
public static ServiceInitUtil util=new ServiceInitUtil();
专用注释配置应用程序上下文上下文;
私有记录器Logger=LoggerFactory.getLogger(ServiceInitUtil.class);
public void initServerServices(AnnotationConfigApplicationContext上下文){
this.context=上下文;
context.refresh();
startServices(新的ArrayList(fetchRegisteredServices());
}
私有集合fetchRegisteredServices(){
返回context.getBeansOfType(Service.class).values();
}
私有void startServices(列出注册服务){
sort(registeredServices,newServiceOrderComparator());
logger.info(“>启动服务…”);
for(服务:注册服务){
logger.info(“>启动服务-”+service.getClass().getSimpleName());
如果(!service.start()){
logger.info(“>启动服务失败-”+service.getClass().getSimpleName());
logger.info(“>启动关机…”);
关闭(服务、注册服务);
打破
}否则{
logger.info(“>已成功启动服务-”+service.getClass().getSimpleName());
}
}
}
私有无效关闭(服务失败服务,列出注册服务){
for(服务:注册服务){
如果(!service.equals(failedService)){
logger.info(“>关闭服务-”+service.getClass().getSimpleName());
service.shutDown();
}否则{
打破
}
}
}
为了使服务持续运行,我需要
ROCServerEntrypoint
持续运行。 尝试了这两种有效的方法

  • 将ROCServerEntrypoint作为线程启动
  • 更天真的是,运行一个无限循环

  • 或者,想知道Spring是否有更干净的解决方案。

    如果没有其他信息,最好的方法是使用带有
    线程的无限循环。sleep
    并在每次睡眠后打印心跳


    如果您在项目中没有任何其他依赖项,那么将spring添加到项目中只是为了摆脱无限循环是没有意义的。

    使用spring boot是的。但是找不到确切的方法。默认情况下,进程退出。因此您没有任何长时间运行的服务,例如HTTP或MQ端点。这些服务如何与out进行通信side world?我有像Apache Flume、zoo keeper、kafka和hive这样的服务,它们将持续运行。项目还处于开始阶段。输入是通过属性文件进行的。输出是通过日志进行的。如果输入来自属性文件,那么就没有理由让它保持活动状态。当您添加某种端点时,通常不会小心点。在我的问题中已经指出我不想这样做。你在信中写道你尝试过,想知道是否有更好的方法。我是说没有更干净的方法。