zoukankan      html  css  js  c++  java
  • Spring Boot Application后台守护Daemon应用

    本地代码启动不报错,部署到服务器之后出现如下一个错误。


    系统的日志如下:

    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. [o.s.b.a.l.ConditionEvaluationReportLoggingListener]
    2019-08-15 15:57:51.789 [restartedMain] ERROR Application run failed [org.springframework.boot.SpringApplication]
    java.lang.IllegalStateException: Failed to execute CommandLineRunner
    	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:816)
    	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:324)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
    	at com.hvisen.springboot.ApplicationLauncher.main(ApplicationLauncher.java:21)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
    Caused by: java.lang.IllegalStateException: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@65f0c43a has been closed already
    	at org.springframework.context.support.AbstractApplicationContext.assertBeanFactoryActive(AbstractApplicationContext.java:1067)
    	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1082)
    	at com.hvisen.springboot.utils.SpringUtils.getBean(SpringUtils.java:26)
    	at com.hvisen.springboot.ApplicationLauncher.run(ApplicationLauncher.java:28)
    	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813)
    	... 10 common frames omitted
    

     程序在启动之后,自动退出了。


    问题分析:
    对于应用来说,无需监听,在执行完任务之后,就自动退出,这个是非常正常的情况。那该如何做才能在后台让其一直运行呢?
    办法也很简单,就是利用Thread.join()功能来实现,让主线程等待当前线程的退出,当前线程一直执行,不自动退出,则可以形成一个监听状态的应用。


    解决代码如下:

    import com.hvisen.springboot.base.TaskStarter;
    import com.hvisen.springboot.utils.SpringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application implements CommandLineRunner {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
        @Override
        public void run(String[] args) throws Exception {
            Thread.currentThread().join();
            //需要启动的代码逻辑
        }
    }
    
  • 相关阅读:
    TSP(Traveling Salesman Problem)-----浅谈旅行商问题(动态规划,回溯实现)
    浅谈Java虚拟机内存中的对象创建,内存布局,访问定位
    Java设计模式---桥接Bridge模式
    Java设计模式---Strategy策略模式
    Java设计模式---ChainOfResponsibility责任链模式
    《前端工程化体系设计与实践》-笔记
    React 16.x 新特性思维导图
    javascript语言精粹-笔记
    react+redux+Instagram
    链表
  • 原文地址:https://www.cnblogs.com/supiaopiao/p/11361821.html
Copyright © 2011-2022 走看看