Start thread at springboot application

后端 未结 2 1228
情深已故
情深已故 2020-12-24 06:15

I want to execute a java class (which contains a java thread I want to execute) after spring boot starts. My initial code:

@SpringBootApplication
public clas         


        
2条回答
  •  误落风尘
    2020-12-24 07:03

    • Main Class SpringBoot

      @SpringBootApplication
      @EnableAsync
      @Controller
      public class ...
      
      
    • Example Class Controler

      import javax.annotation.PostConstruct;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.context.ApplicationContext;
      import org.springframework.core.task.TaskExecutor;
      import org.springframework.stereotype.Component;
      
      @Component
      public class ExecutorBase {
      
          private static final Logger log = LoggerFactory.getLogger(ExecutorBase.class);
      
          @Autowired
          private TaskExecutor taskExecutor;
          @Autowired
          private ApplicationContext applicationContext;
      
          private Boolean debug = true;
      
          @PostConstruct
          public void atStartup() {
              ClasseTaskRunn classeTaskRunn = applicationContext.getBean(ClasseTaskRunn.class);
              taskExecutor.execute(classeTaskRunn );
              if (debug) {
                  log.warn("###### Startup ok");
              }
          }
      }
      
      
    • Example Class Task Runnable

      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.context.annotation.Scope;
      import org.springframework.stereotype.Component;
      
      @Component
      @Scope("application")
      public class ClasseTaskRunn implements Runnable {
      
          private static final Logger log = LoggerFactory.getLogger(ClasseTaskRunn.class);
      
          @Autowired
          ClasseDAO classeDAO;
      
          @Override
          public void run() {
              longBackgorund();
          }
      
          protected void longBackgorund() {
              while (test) {
                  if (debug) {
                      log.warn("###### DEBUG: " ... );
                  }
      
                  try {
                      Thread.sleep(10000);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
              }
          }
      }
      
      

提交回复
热议问题