首页IT科技springboot配置线程池(spring boot 自定义线程池与使用)

springboot配置线程池(spring boot 自定义线程池与使用)

时间2025-05-04 17:36:11分类IT科技浏览6222
导读:一、进行线程池创建...

一             、进行线程池创建

二                  、创建bean操作对象 提供根据beanName获取,手动注入bean等方法,适用于不被spring管理的类中(thread       、callback)

import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.stereotype.Component; /** * @author lu_wanli **/ @Component public class SpringHelper implements BeanFactoryPostProcessor, ApplicationContextAware { private static ConfigurableListableBeanFactory beanFactory; /** * 获取 Spring Bean工厂 * * @return beanFactory */ public static ConfigurableListableBeanFactory getBeanFactory() { return beanFactory; } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { SpringHelper.beanFactory = beanFactory; } /** * 获取指定name的bean */ @SuppressWarnings("unchecked") public static <T> T getBean(String name) throws BeansException { return (T) beanFactory.getBean(name); } /** * 获取指定type的Bean */ public static <T> T getBean(Class<T> clz) throws BeansException { return beanFactory.getBean(clz); } /** * 包含Bean * * @param name beanClassName * @return true/false */ public static boolean containsBean(String name) { return beanFactory.containsBean(name); } /** * 判断以给定名字注册的bean定义是一个singleton还是一个prototype             。 如果与给定名字相应的bean定义没有被找到             ,将会抛出一个异常(NoSuchBeanDefinitionException) * * @param name beanName * @return boolean */ public static boolean isSingleton(String name) { return beanFactory.isSingleton(name); } private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringHelper.applicationContext = applicationContext; } /** * 动态注入单例bean实例 * * @param beanName bean名称 * @param singletonObject 单例bean实例 * @return 注入实例 */ public static Object registerSingletonBean(String beanName, Object singletonObject) { //将applicationContext转换为ConfigurableApplicationContext ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext; //获取BeanFactory DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getAutowireCapableBeanFactory(); //动态注册bean. defaultListableBeanFactory.registerSingleton(beanName, singletonObject); //获取动态注册的bean. return configurableApplicationContext.getBean(beanName); } }

三          、创建异步线程的管理类

import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; /** * 异步任务管理器 * */ public class AsyncManager { /** * 异步操作任务调度线程池 */ private final ThreadPoolTaskExecutor taskExecutor = SpringHelper.getBean("threadPoolTaskExecutor"); /** * 单例模式 */ private AsyncManager() { } private static final AsyncManager ME = new AsyncManager(); public static AsyncManager me() { return ME; } /** * 执行任务 * * @param task 任务 */ public void execute(Runnable task){ taskExecutor.execute(task); } /** * 停止线程池 */ public void shutdown() { taskExecutor.shutdown(); } }

四                  、在项目关闭时关闭相关线程池资源

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.annotation.PreDestroy; /** * 关闭线程池资源 */ @Component public class ShutDownManager { private static final Logger logger = LoggerFactory.getLogger(ShutDownManager.class); @PreDestroy public void destory() { shutdownAsyncManager(); } private void shutdownAsyncManager() { try { logger.info("========关闭任务池=========="); AsyncManager.me().shutdown(); } catch (Exception e) { logger.error(e.getMessage(), e); } } }
声明:本站所有文章                  ,如无特殊说明或标注       ,均为本站原创发布                  。任何个人或组织          ,在未征得本站同意时                  ,禁止复制          、盗用       、采集                  、发布本站内容到任何网站             、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益          ,可联系我们进行处理          。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
django forbidden(Django 出现 frame because it set X-Frame-Options to deny 错误) python ord()函数(Python OrderedDict怎么用)