Create prototype scoped ExecutorService @ Bean @ Scope (ConfigurableBeanFactory .SCOPE_PROTOTYPE )
ExecutorService newExecutorService () {
return Executors .newFixedThreadPool (ThreadPoolUtil .ioIntesivePoolSize ());
}@ Component public class SleepyTaskProvider implements TaskProvider <Integer , Integer > {
private SomeOtherBean someOtherBean ;
public SleepyTaskProvider (SomeOtherBean bean ) {
this .someOtherBean = bean ;
}
public Task <Integer , Integer > provideTask (final Integer id ) {
return new Task <Integer , Integer >() {
private static final long serialVersionUID = 1L ;
public Integer execute () {
someOtherBean .doSomeWork ();
return id ;
}
};
}
}Invoke dexecutor by building it. @ Component public class ScheduledTasks {
private static final Logger LOGGER = LoggerFactory .getLogger (ScheduledTasks .class );
private ExecutorService executorService ;
private TaskProvider <Integer , Integer > taskProvider ;
public ScheduledTasks (ExecutorService executorService , TaskProvider <Integer , Integer > taskProvider ) {
this .executorService = executorService ;
this .taskProvider = taskProvider ;
}
@ Scheduled (fixedRate = 5000 )
public void runDexecutor () {
LOGGER .debug ("Running.." );
DefaultDexecutor <Integer , Integer > executor = newDexecutor ();
addDependency (executor );
executor .execute (ExecutionConfig .NON_TERMINATING );
}
private void addDependency (DefaultDexecutor <Integer , Integer > executor ) {
executor .addDependency (1 , 2 );
}
private DefaultDexecutor <Integer , Integer > newDexecutor () {
DexecutorConfig <Integer , Integer > config = dexConfig ();
DefaultDexecutor <Integer , Integer > executor = new DefaultDexecutor <Integer , Integer >(config );
return executor ;
}
private DexecutorConfig <Integer , Integer > dexConfig () {
return new DexecutorConfig <>(executorService , taskProvider );
}
}. ____ _ __ _ _
/\\ / ___' _ __ _ _(_)_ __ __ _ \ \ \ \( ( )\___ | ' _ | ' _| | ' _ \/ _` | \ \ \ \\\ / ___)| | _)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.4.2) 2021-01-16 15:46:14.618 INFO 7592 --- [ main] c.g.dex.spring.DexSpringApplication : Starting DexSpringApplication using Java 1.8.0_271 on DESKTOP-9AES3TT with PID 7592 (E:\githubRepos\dexecutor-spring-example\target\classes started by reach in E:\githubRepos\dexecutor-spring-example) 2021-01-16 15:46:14.620 DEBUG 7592 --- [ main] c.g.dex.spring.DexSpringApplication : Running with Spring Boot v2.4.2, Spring v5.3.3 2021-01-16 15:46:14.620 INFO 7592 --- [ main] c.g.dex.spring.DexSpringApplication : No active profile set, falling back to default profiles: default 2021-01-16 15:46:14.952 INFO 7592 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService ' taskScheduler' 2021-01-16 15:46:14.961 DEBUG 7592 --- [ scheduling-1] com.github.dex.spring.ScheduledTasks : Running.. 2021-01-16 15:46:14.964 INFO 7592 --- [ main] c.g.dex.spring.DexSpringApplication : Started DexSpringApplication in 0.589 seconds (JVM running for 0.835) 2021-01-16 15:46:14.966 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Submitting 1 node for execution 2021-01-16 15:46:14.967 DEBUG 7592 --- [ scheduling-1] c.g.d.core.DefaultExecutionEngine : Received Task 1 2021-01-16 15:46:14.967 DEBUG 7592 --- [pool-1-thread-1] c.github.dexecutor.core.task.LoggerTask : Executing Node # 1 2021-01-16 15:46:14.967 INFO 7592 --- [pool-1-thread-1] com.github.dex.spring.SomeOtherBean : Invoked 2021-01-16 15:46:14.967 DEBUG 7592 --- [pool-1-thread-1] c.github.dexecutor.core.task.LoggerTask : Node # 1, Execution Done! 2021-01-16 15:46:14.968 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Processing of node 1 done, with status SUCCESS 2021-01-16 15:46:14.968 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Submitting 2 node for execution 2021-01-16 15:46:14.968 DEBUG 7592 --- [ scheduling-1] c.g.d.core.DefaultExecutionEngine : Received Task 2 2021-01-16 15:46:14.969 DEBUG 7592 --- [pool-1-thread-2] c.github.dexecutor.core.task.LoggerTask : Executing Node # 2 2021-01-16 15:46:14.969 INFO 7592 --- [pool-1-thread-2] com.github.dex.spring.SomeOtherBean : Invoked 2021-01-16 15:46:14.969 DEBUG 7592 --- [pool-1-thread-2] c.github.dexecutor.core.task.LoggerTask : Node # 2, Execution Done! 2021-01-16 15:46:14.969 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Processing of node 2 done, with status SUCCESS 2021-01-16 15:46:14.969 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Total Time taken to process 2 jobs is 4 ms. 2021-01-16 15:46:14.969 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Processed Nodes Ordering [1, 2] 2021-01-16 15:46:19.965 DEBUG 7592 --- [ scheduling-1] com.github.dex.spring.ScheduledTasks : Running.. 2021-01-16 15:46:19.966 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Submitting 1 node for execution 2021-01-16 15:46:19.966 DEBUG 7592 --- [ scheduling-1] c.g.d.core.DefaultExecutionEngine : Received Task 1 2021-01-16 15:46:19.967 DEBUG 7592 --- [pool-1-thread-3] c.github.dexecutor.core.task.LoggerTask : Executing Node # 1 2021-01-16 15:46:19.967 INFO 7592 --- [pool-1-thread-3] com.github.dex.spring.SomeOtherBean : Invoked 2021-01-16 15:46:19.968 DEBUG 7592 --- [pool-1-thread-3] c.github.dexecutor.core.task.LoggerTask : Node # 1, Execution Done! 2021-01-16 15:46:19.968 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Processing of node 1 done, with status SUCCESS 2021-01-16 15:46:19.968 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Submitting 2 node for execution 2021-01-16 15:46:19.968 DEBUG 7592 --- [ scheduling-1] c.g.d.core.DefaultExecutionEngine : Received Task 2 2021-01-16 15:46:19.969 DEBUG 7592 --- [pool-1-thread-4] c.github.dexecutor.core.task.LoggerTask : Executing Node # 2 2021-01-16 15:46:19.970 INFO 7592 --- [pool-1-thread-4] com.github.dex.spring.SomeOtherBean : Invoked 2021-01-16 15:46:19.970 DEBUG 7592 --- [pool-1-thread-4] c.github.dexecutor.core.task.LoggerTask : Node # 2, Execution Done! 2021-01-16 15:46:19.970 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Processing of node 2 done, with status SUCCESS 2021-01-16 15:46:19.971 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Total Time taken to process 2 jobs is 5 ms. 2021-01-16 15:46:19.971 DEBUG 7592 --- [ scheduling-1] c.g.dexecutor.core.DefaultDexecutor : Processed Nodes Ordering [1, 2]