spring 线程池执行器DefaultManagedTaskScheduler之jndi

Posted gc65

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 线程池执行器DefaultManagedTaskScheduler之jndi相关的知识,希望对你有一定的参考价值。

 

package com.example.spring.async.config;

import java.util.concurrent.Executors;

import javax.naming.NamingException;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mock.jndi.SimpleNamingContextBuilder;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler;

@Configuration
public class JndiConfig 
    @Bean
    @Qualifier("jndiTaskScheduler")
    TaskScheduler taskScheduler () 
        //正常情况下,jndi是寻找其它进程提供的服务,这里在本进程中注册只是为了测试效果
        registerJndi();
        //这个类会使用jndi从服务器上寻找服务,可能由其它jvm进程提供线程池。使用的名字为注册名:java:comp/DefaultManagedScheduledExecutorService
        return new DefaultManagedTaskScheduler();
    

    /**
     * 使用jndi将线程池注入,下面的名字作为寻址的标识:java:comp/DefaultManagedScheduledExecutorService
     * 
     */
    public void registerJndi() 
        SimpleNamingContextBuilder b = new SimpleNamingContextBuilder();
        b.bind("java:comp/DefaultManagedScheduledExecutorService",
               Executors.newScheduledThreadPool(5));
        try 
            b.activate();
         catch (IllegalStateException e) 
            e.printStackTrace();
         catch (NamingException e) 
            e.printStackTrace();
        
    

使用类:

package com.example.spring.async;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Service;

import com.example.spring.MyLog;
/**
 * 测试通过jndi获取的线程池执行器来执行服务
 * @DESC 
 * @author guchuang
 *
 */
@Service
public class JndiThreadPool 
    @Autowired
    @Qualifier("jndiTaskScheduler")
    TaskScheduler taskScheduler;

    public void runTask () 
        taskScheduler.scheduleWithFixedDelay((Runnable) () -> 
            MyLog.info("running ");
        , 1000L);
    

测试类:

package com.example.spring.async;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import com.example.spring.BaseDemoApplicationTest;
import com.example.spring.MyLog;
import com.example.spring.async.JndiThreadPool;

public class JndiThreadPoolTest extends BaseDemoApplicationTest 

    @Autowired
    JndiThreadPool jndi;
    
    @BeforeClass
    public static void setUpBeforeClass() throws Exception 
    

    @Before
    public void setUp() throws Exception 
    

    @Test
    public void testRunTask() 
        jndi.runTask();
        MyLog.sleep(5000);
    

 

以上是关于spring 线程池执行器DefaultManagedTaskScheduler之jndi的主要内容,如果未能解决你的问题,请参考以下文章

java 线程池 spring线程池 多线程知识总结

spring boot: 线程池ThreadPoolTaskExecutor, 多线程

Spring 集成异步任务线程池

spring的事件机制实战

Spring中线程池的用法

Spring线程池ThreadPoolTaskExecutor学习总结