0
votes

Java Spring-Boot: boucle principale à côté de HTTP-HANDLER

Je commence par le démarrage de printemps.

public class App 
{
    public static void main (String [] args) throws Exception
    {
        System.out.println ("--------------------");

        SpringApplication.run (App.class, args);

        for (;;)   // my main loop
        {
            // do something permanently
            Thread.sleep (10000);
        }    
    }  
}
  • est ce design avec la boucle la meilleure façon de le faire? Li> ul>

    J'utilise une liaison de configuration (@Value et @configurationProperties aussi). p>

    • Comment puis-je obtenir cette information dans ma boucle principale? Je ne peux pas le faire avec des variables statiques. Li> ul> p>


2 commentaires

Vous pouvez le faire avec Springboot à l'aide de @scheduled (fixdelay = 10000). Pourquoi voulez-vous le faire à l'extérieur du printemps? Exemple de planificateur: printemps.io/guides/gs/scheduling-tasks


Ce n'est pas mon plan de le faire à l'extérieur. Je ne savais tout simplement pas comment le faire à l'intérieur.


3 Réponses :


3
votes

Ne faites rien comme ça dans votre classe d'application.

Définissez simplement un haricot de ressort et annoter une fonction contenant quelle que soit la logique que vous souhaitez effectuer régulièrement et que l'annotation est avec un @scheduled.

Regardez les éléments suivants pour plus d'informations: https://www.baeldung.com / Tâches programmées à ressort


0 commentaires

3
votes

Voir planificateur Doc de printemps. Brièvement:

Ajouter @enablesCHEDULING à Starter / Config: P>

@Component
public class ScheduledTasks {
    @Scheduled(fixedRate = 10000)
    public void reportCurrentTime() {
        // do anything
    }
}


0 commentaires

1
votes

Je ne pense pas que ce serait le meilleur design. Si vous voulez faire la tâche non http, je vous recommanderais de créer de nouveaux haricots et d'utiliser @scheduled et peut spécifier l'heure à laquelle vous souhaitez le faire.

@Component
public class YourTask{
@Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        //your task
    }
}


0 commentaires