Spring Boot - infinite loop service

16,594

Solution 1

What I'm using is a message broker and a consumer put at the spring boot application to do the job.

Solution 2

Do not implement an infinite loop yourself. Let the framework handle it using its task execution capabilities:

@Service
public class RecordChecker{

    //Executes each 500 ms
    @Scheduled(fixedRate=500)
    public void checkRecords() {
        //Check states and send mails
    }
}

Don't forget to enable scheduling for your application:

@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class);
    }
}

See also:

Share:
16,594
Pawel Urban
Author by

Pawel Urban

Android Dev | Freelancer | Trainer

Updated on July 28, 2022

Comments

  • Pawel Urban
    Pawel Urban almost 2 years

    I want to build a headless application which will query the DB in infinite loop and perform some operations in certain conditions (e.g. fetch records with specific values and when found launch e-mail sending procedure for each message).

    I want to use Spring Boot as a base (especially because of Actuator to allow expose health-checks), but for now I used Spring Boot for building REST web-services.

    Is there any best practices or patterns to follow when building infinite loop applications ? Does anyone tried to build it based on Spring Boot and can share with me his architecture for this case ?

    Best regards.

  • Pawel Urban
    Pawel Urban about 8 years
    You mean that you use Spring Integration to create channel to poll database and then when something is found your consumer is executing a logic on found rows ?
  • Pawel Urban
    Pawel Urban about 8 years
    Thanks for your hint. I finally used Spring Integration + Spring Boot. I used JDBC Inbound Channel Adapter to pool database and written my own ServiceActivator to react on found rows. Work like a charm with a little amount of code.
  • waldrabe
    waldrabe over 2 years
    Is it possible to use a similar construct where you can use a variable for (or instead of) 'fixedRate'? For example I want to read the value vor 'fixedRate' from a configuration file. (See stackoverflow.com/questions/69281633/…)