2017-07-24 6 views
0

Wie kann ich einige Prozesse im Hintergrund mit Spring Boot ausführen? Dies ist ein Beispiel für das, was ich brauche:run Prozess im Hintergrund mit 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(); 
      } 
     } 
    } 
} 

Antwort

2

Sie könnten nur die @ Spiel-Annotation verwenden.

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

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

Die Scheduled Annotation definiert, wenn ein bestimmtes Verfahren abläuft. HINWEIS: In diesem Beispiel wird "fixedRate" verwendet, das das Intervall zwischen Methodenaufrufen angibt, die ab der Startzeit jedes Aufrufs gemessen werden.

+0

Vielen Dank, ich möchte die FixedRate in die Unendlichkeit ändern –

+0

Warum würden Sie das tun? In deinem Beispiel könntest du die Rate auf 3000 setzen, also brauchst du nicht die TimeUnit.SECONDS.sleep (3); nicht mehr, da Ihre Methode alle 3000 ms ausgeführt wird. –

2

Sie können Async-Verhalten verwenden. Wenn Sie die Methode aufrufen, wartet der aktuelle Thread darauf, dass er beendet wird.

Erstellen Sie eine konfigurierbare Klasse wie diese.

@Configuration 
@EnableAsync 
public class AsyncConfiguration { 

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

Und dann in einem Verfahren verwendet:

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

Hier finden Sie aktuelle spring documentation für weitere Informationen