2017-07-24 70 views
0

如何使用Spring Boot在後臺運行一些進程?這是我需要的一個例子:使用彈簧啓動在後臺運行進程

@SpringBootApplication 
public class SpringMySqlApplication { 

    @Autowired 
    AppUsersRepo appRepo; 

    public static void main(String[] args) { 
     SpringApplication.run(SpringMySqlApplication.class, args); 

     while (true) { 
      Date date = new Date(); 
      System.out.println(date.toString()); 
      try { 
       TimeUnit.SECONDS.sleep(3); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

回答

2

你可以只使用@計劃的註釋。

@Scheduled(fixedRate = 5000) 
public void reportCurrentTime() { 
    log.info("The time is now " + System.currentTimeMillis())); 
} 

https://spring.io/guides/gs/scheduling-tasks/

當一個特定的方法運行預定的註解定義。注意:此示例使用fixedRate,它指定從每次調用的開始時間開始測量的方法調用之間的時間間隔。

+0

謝謝你我想把fixedRate變成無窮大 –

+0

你爲什麼要這麼做?在你的例子中,你可以將速率設置爲3000,所以你不需要做TimeUnit.SECONDS.sleep(3);現在你的方法每3000毫秒執行一次。 –

2

您可以使用異步行爲。當你調用該方法時,當前線程會等待它完成。

創建一個像這樣的可配置類。

@Configuration 
@EnableAsync 
public class AsyncConfiguration { 

    @Bean(name = "threadPoolTaskExecutor") 
    public Executor threadPoolTaskExecutor() { 
     return new ThreadPoolTaskExecutor(); 
    } 
} 

,然後在方法中使用:

@Async("threadPoolTaskExecutor") 
public void someAsyncMethod(...) {} 

看一看spring documentation更多信息