Close

Spring - DefaultManagedTaskScheduler example

[Last Updated: Nov 20, 2025]

DefaultManagedTaskScheduler

java.lang.ObjectObjectorg.springframework.scheduling.concurrent.ConcurrentTaskExecutorConcurrentTaskExecutororg.springframework.core.task.AsyncListenableTaskExecutorAsyncListenableTaskExecutororg.springframework.scheduling.SchedulingTaskExecutorSchedulingTaskExecutororg.springframework.scheduling.concurrent.ConcurrentTaskSchedulerConcurrentTaskSchedulerorg.springframework.scheduling.TaskSchedulerTaskSchedulerorg.springframework.scheduling.concurrent.DefaultManagedTaskSchedulerDefaultManagedTaskSchedulerorg.springframework.beans.factory.InitializingBeanInitializingBeanLogicBig

This implementation implicitly initializes the underlying task scheduler via JNDI lookup.

According to JSR-236 specification: The Java EE product provider (the application server) must bind a pre-configured, default ManagedScheduledExecutorService so that application components can find it under the JNDI name java:comp/DefaultManagedScheduledExecutorService.

Spring's DefaultManagedTaskScheduler internally initializes the underlying scheduler from this JNDI look up. The scheduler must be used as a bean otherwise this class will work as super class ConcurrentTaskScheduler.

Also this class is not strictly JSR-236 based; it can work with any regular ScheduledExecutorService that can be found in JNDI.

Example

In the following example we are not going to demonstrate implicit JNDI binding in a JEE server environment but instead we are going to bind "java:comp/DefaultManagedScheduledExecutorService" manually by using SimpleNamingContextBuilder.

package com.logicbig.example;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler;

@Configuration
public class MyConfig {

    @Bean
    TaskScheduler taskScheduler() {
        return new DefaultManagedTaskScheduler();
    }

    @Bean
    MyBean myBean() {
        return new MyBean();
    }
}
package com.logicbig.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.TaskScheduler;

import java.time.LocalTime;

public class MyBean {
    @Autowired
    TaskScheduler taskScheduler;

    public void runTask() {
        taskScheduler.scheduleWithFixedDelay((Runnable) () -> {
            System.out.println("running " + LocalTime.now());
        }, 1000L);
    }
}
package com.logicbig.example;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.mock.jndi.SimpleNamingContextBuilder;
import org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler;

import javax.naming.NamingException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class DefaultManagedTaskSchedulerExample {

    public static void main (String[] args) throws NamingException, InterruptedException {
        //binding the scheduler manually,
        // In JEE compliant server environment this will be
        // provided by the server product

        SimpleNamingContextBuilder b = new SimpleNamingContextBuilder();
        b.bind("java:comp/DefaultManagedScheduledExecutorService",
               Executors.newScheduledThreadPool(5));
        b.activate();

        //bootstrapping spring
        ApplicationContext context =
                  new AnnotationConfigApplicationContext(MyConfig.class);
        MyBean bean = context.getBean(MyBean.class);
        bean.runTask();
        //shutdown after 10 sec
        Thread.sleep(10000);
        DefaultManagedTaskScheduler scheduler = context.getBean(
                  DefaultManagedTaskScheduler.class);
        Executor exec = scheduler.getConcurrentExecutor();
        ExecutorService es = (ExecutorService) exec;
        es.shutdownNow();
    }
}

Output

running 16:31:29.728035500
running 16:31:30.731231800
running 16:31:31.732378100
running 16:31:32.733564200
running 16:31:33.734986400
running 16:31:34.736386
running 16:31:35.736719300
running 16:31:36.737566200
running 16:31:37.738595800
running 16:31:38.738936200

SimpleNamingContextBuilder has been deprecated

SimpleNamingContextBuilder was deprecated in Spring Framework 5.2 and was removed in Spring Framework 6.0.
It is recommended to use complete solutions from third parties such as Simple-JNDI




Example Project

Dependencies and Technologies Used:

  • spring-context 5.3.39 (Spring Context)
     Version Compatibility: 4.0.0.RELEASE - 5.3.39Version List
    ×

    Version compatibilities of spring-context with this example:

    • 4.0.0.RELEASE
    • 4.0.1.RELEASE
    • 4.0.2.RELEASE
    • 4.0.3.RELEASE
    • 4.0.4.RELEASE
    • 4.0.5.RELEASE
    • 4.0.6.RELEASE
    • 4.0.7.RELEASE
    • 4.0.8.RELEASE
    • 4.0.9.RELEASE
    • 4.1.0.RELEASE
    • 4.1.1.RELEASE
    • 4.1.2.RELEASE
    • 4.1.3.RELEASE
    • 4.1.4.RELEASE
    • 4.1.5.RELEASE
    • 4.1.6.RELEASE
    • 4.1.7.RELEASE
    • 4.1.8.RELEASE
    • 4.1.9.RELEASE
    • 4.2.0.RELEASE
    • 4.2.1.RELEASE
    • 4.2.2.RELEASE
    • 4.2.3.RELEASE
    • 4.2.4.RELEASE
    • 4.2.5.RELEASE
    • 4.2.6.RELEASE
    • 4.2.7.RELEASE
    • 4.2.8.RELEASE
    • 4.2.9.RELEASE
    • 4.3.0.RELEASE
    • 4.3.1.RELEASE
    • 4.3.2.RELEASE
    • 4.3.3.RELEASE
    • 4.3.4.RELEASE
    • 4.3.5.RELEASE
    • 4.3.6.RELEASE
    • 4.3.7.RELEASE
    • 4.3.8.RELEASE
    • 4.3.9.RELEASE
    • 4.3.10.RELEASE
    • 4.3.11.RELEASE
    • 4.3.12.RELEASE
    • 4.3.13.RELEASE
    • 4.3.14.RELEASE
    • 4.3.15.RELEASE
    • 4.3.16.RELEASE
    • 4.3.17.RELEASE
    • 4.3.18.RELEASE
    • 4.3.19.RELEASE
    • 4.3.20.RELEASE
    • 4.3.21.RELEASE
    • 4.3.22.RELEASE
    • 4.3.23.RELEASE
    • 4.3.24.RELEASE
    • 4.3.25.RELEASE
    • 4.3.26.RELEASE
    • 4.3.27.RELEASE
    • 4.3.28.RELEASE
    • 4.3.29.RELEASE
    • 4.3.30.RELEASE
    • 5.0.0.RELEASE
    • 5.0.1.RELEASE
    • 5.0.2.RELEASE
    • 5.0.3.RELEASE
    • 5.0.4.RELEASE
    • 5.0.5.RELEASE
    • 5.0.6.RELEASE
    • 5.0.7.RELEASE
    • 5.0.8.RELEASE
    • 5.0.9.RELEASE
    • 5.0.10.RELEASE
    • 5.0.11.RELEASE
    • 5.0.12.RELEASE
    • 5.0.13.RELEASE
    • 5.0.14.RELEASE
    • 5.0.15.RELEASE
    • 5.0.16.RELEASE
    • 5.0.17.RELEASE
    • 5.0.18.RELEASE
    • 5.0.19.RELEASE
    • 5.0.20.RELEASE
    • 5.1.0.RELEASE
    • 5.1.1.RELEASE
    • 5.1.2.RELEASE
    • 5.1.3.RELEASE
    • 5.1.4.RELEASE
    • 5.1.5.RELEASE
    • 5.1.6.RELEASE
    • 5.1.7.RELEASE
    • 5.1.8.RELEASE
    • 5.1.9.RELEASE
    • 5.1.10.RELEASE
    • 5.1.11.RELEASE
    • 5.1.12.RELEASE
    • 5.1.13.RELEASE
    • 5.1.14.RELEASE
    • 5.1.15.RELEASE
    • 5.1.16.RELEASE
    • 5.1.17.RELEASE
    • 5.1.18.RELEASE
    • 5.1.19.RELEASE
    • 5.1.20.RELEASE
    • 5.2.0.RELEASE
    • 5.2.1.RELEASE
    • 5.2.2.RELEASE
    • 5.2.3.RELEASE
    • 5.2.4.RELEASE
    • 5.2.5.RELEASE
    • 5.2.6.RELEASE
    • 5.2.7.RELEASE
    • 5.2.8.RELEASE
    • 5.2.9.RELEASE
    • 5.2.10.RELEASE
    • 5.2.11.RELEASE
    • 5.2.12.RELEASE
    • 5.2.13.RELEASE
    • 5.2.14.RELEASE
    • 5.2.15.RELEASE
    • 5.2.16.RELEASE
    • 5.2.17.RELEASE
    • 5.2.18.RELEASE
    • 5.2.19.RELEASE
    • 5.2.20.RELEASE
    • 5.2.21.RELEASE
    • 5.2.22.RELEASE
    • 5.2.23.RELEASE
    • 5.2.24.RELEASE
    • 5.2.25.RELEASE
    • 5.3.0
    • 5.3.1
    • 5.3.2
    • 5.3.3
    • 5.3.4
    • 5.3.5
    • 5.3.6
    • 5.3.7
    • 5.3.8
    • 5.3.9
    • 5.3.10
    • 5.3.11
    • 5.3.12
    • 5.3.13
    • 5.3.14
    • 5.3.15
    • 5.3.16
    • 5.3.17
    • 5.3.18
    • 5.3.19
    • 5.3.20
    • 5.3.21
    • 5.3.22
    • 5.3.23
    • 5.3.24
    • 5.3.25
    • 5.3.26
    • 5.3.27
    • 5.3.28
    • 5.3.29
    • 5.3.30
    • 5.3.31
    • 5.3.32
    • 5.3.33
    • 5.3.34
    • 5.3.35
    • 5.3.36
    • 5.3.37
    • 5.3.38
    • 5.3.39

    Versions in green have been tested.

  • spring-test 5.3.39 (Spring TestContext Framework)
  • JDK 25
  • Maven 3.9.11

DefaultManagedTaskScheduler Example Select All Download
  • spring-core-default-managed-task-scheduler
    • src
      • main
        • java
          • com
            • logicbig
              • example
                • DefaultManagedTaskSchedulerExample.java

    See Also