Tuesday, November 23, 2021

Spring Scheduler starting at 30 minutes after a given hour and then scheduling every 30 minutes

not so trivial, you must use 2 different schedulers, because the cron regex doesn't support this case:
 

package com.example.crondemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;


@SpringBootApplication
public class CrondemoApplication implements CommandLineRunner {
    @Autowired
    ThreadPoolTaskScheduler threadPoolTaskScheduler;

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

    @Override
    public void run(String... args) throws Exception {
        // CronTrigger cronTrigger = new CronTrigger("0 30/30 19-22 * * *");  // this at 19:30 20:30...
        CronTrigger cronTrigger1 = new CronTrigger("0 30 0-8 * * *"); // this is also 20:30 21:30...
        CronTrigger cronTrigger2 = new CronTrigger("0 0 1-8 * * *"); // this is also 20:30 21:30...

        threadPoolTaskScheduler.schedule(
                new RunnableTask("Hello Pierluigi1"),
                cronTrigger1
        );
        threadPoolTaskScheduler.schedule(
                new RunnableTask("Hello Pierluigi2"),
                cronTrigger2
        );
    }
}
 

package com.example.crondemo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;


@Configuration
public class MyConfig {
    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
        ThreadPoolTaskScheduler threadPoolTaskScheduler
                = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(5);
        threadPoolTaskScheduler.setThreadNamePrefix(
                "ThreadPoolTaskScheduler");
        return threadPoolTaskScheduler;
    }
}
 
package com.example.crondemo;

import java.util.Date;

class RunnableTask implements Runnable{
    private String message;

    public RunnableTask(String message){
        this.message = message;
    }

    @Override
    public void run() {
        System.out.println(new Date()+" Runnable Task with " + message
                +" on thread "+Thread.currentThread().getName());
    }
}

The output is:
Tue Nov 23 00:30:21 CET 2021 Runnable Task with Hello Pierluigi1 on thread ThreadPoolTaskScheduler1
Tue Nov 23 01:00:00 CET 2021 Runnable Task with Hello Pierluigi2 on thread ThreadPoolTaskScheduler2
Tue Nov 23 01:30:00 CET 2021 Runnable Task with Hello Pierluigi1 on thread ThreadPoolTaskScheduler1
Tue Nov 23 02:00:00 CET 2021 Runnable Task with Hello Pierluigi2 on thread ThreadPoolTaskScheduler3
Tue Nov 23 02:30:00 CET 2021 Runnable Task with Hello Pierluigi1 on thread ThreadPoolTaskScheduler2
Tue Nov 23 03:00:00 CET 2021 Runnable Task with Hello Pierluigi2 on thread ThreadPoolTaskScheduler4
Tue Nov 23 03:30:12 CET 2021 Runnable Task with Hello Pierluigi1 on thread ThreadPoolTaskScheduler1


Saturday, October 9, 2021

Unvaccinated

 the author of this blog is still preserving his original DNA, as mother made him.

Ivermectin forever. Much more than " a horse dewormer".  

Do your own research, don't believe the Propaganda.



Friday, May 21, 2021

AppDynamics presentation

I have recently published a AppDynamics quick tutorial on youtube 

https://www.youtube.com/watch?v=FjGCoj7oOtI Part 1 

 

https://www.youtube.com/watch?v=EdDjF0ZatOk Part 2 

 

 The source is available here https://github.com/vernetto/apmdemo