我有一個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
進行連續運行。 試過這兩種方法。
- 將ROCServerEntrypoint作爲線程啓動。
- 更天真的是,運行一個無限循環。
或者,想知道Spring是否有一些更乾淨的解決方案。
使用Spring Boot? – chrylis
是使用彈簧引導。但是找不到如何。默認情況下,該進程退出。 –
因此,您沒有任何長期運行的服務,例如HTTP或MQ端點?這些服務如何與外界溝通? – chrylis