首页 > 其他分享 >解决SpringBoot Async异步方法获取不到Security Context

解决SpringBoot Async异步方法获取不到Security Context

时间:2023-09-15 16:56:12浏览次数:39  
标签:设置 SpringBoot asyncTaskExecutor 线程 Context new Async POOL SIZE

 SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);这样设置的话很不安全,不废话,直接上代码,改造一下AsyncConfig就可以了,线程也安全

/**
 * @description: 线程池的配置
 */
@Configuration
public class AsyncConfig {
    private static final int MAX_POOL_SIZE = 50;

    private static final int CORE_POOL_SIZE = 20;

    @Bean("MisTaskExecutor")
    public TaskExecutor MisTaskExecutor() {

        ThreadPoolTaskExecutor asyncTaskExecutor = new ThreadPoolTaskExecutor();
        // 设置核心线程数
        asyncTaskExecutor.setCorePoolSize(CORE_POOL_SIZE);
        // 设置最大线程数
        asyncTaskExecutor.setMaxPoolSize(MAX_POOL_SIZE);
        // 设置队列容量
        asyncTaskExecutor.setQueueCapacity(20);
        // 设置线程活跃时间(秒)
        asyncTaskExecutor.setKeepAliveSeconds(60);
        // 设置默认线程名称
        asyncTaskExecutor.setThreadNamePrefix("Mis-Async");
        // 设置拒绝策略
        asyncTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        // 等待所有任务结束后再关闭线程池
        asyncTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        asyncTaskExecutor.initialize(); //这句很关键
        return new DelegatingSecurityContextAsyncTaskExecutor(asyncTaskExecutor); //这句也很关键

    }
}

 

标签:设置,SpringBoot,asyncTaskExecutor,线程,Context,new,Async,POOL,SIZE
From: https://www.cnblogs.com/kakaeex/p/17705403.html

相关文章

  • FastApi async函数一定比普通函数快吗,你是否有相同的问号
    FastAPI是一个用于构建API的现代、快速(高性能)的web框架,使用Python3.6+并基于标准的Python类型提示关键特性:快速:可与NodeJS和Go并肩的极高性能(归功于Starlette和Pydantic)。最快的Pythonweb框架之一。高效编码:提高功能开发速度约200%至300%。*更少......
  • flask从入门到精通之钩子、异常、context、jinjia模板、过滤器
    一、请求全局钩子【hook】此处的全局钩子,其实就是类似django里面的中间件。也就是只要调用或者注册了,在http请求响应中是必然执行的。在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:在项目运行开始时,建立数据库连接,或创建连接池;在客户端请求开始时,根据......
  • 【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
    前言......
  • springboot引入rabbitmq
    RabbitMQ是一个开源的消息代理软件,用于处理应用程序之间的消息传递。SpringBoot是一种让Spring开发变得更简单的工具,你可以使用它来快速地创建基于Spring的应用程序。一、如何在SpringBoot中引入RabbitMQ:首先,你需要在项目的pom.xml文件中添加RabbitMQ的依赖。如果你使用的是Maven......
  • SpringBoot解决跨域问题
    一、概述现在企业级的项目大多数都是前后端分离,加之微服务技术已经成熟,在日常的开发中就难免遇到跨域问题。跨域指的是:浏览器不能执行其他网站的脚本,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。跨域是由浏览器的同源策略造成的,是浏览器施......
  • 通过UltraSync减轻主节点负担、提升业务系统性能,AntDB如何做到?
    众所周知,数据库在多中心场景下,主中心主库不仅要承担原本业务的压力,而且还要将redo日志传输到不同的备库端,这样对主库将产生很大的性能影响。通常情况下,备中心和主中心不在同⼀机房,为了保证业务响应速度,主中心主节点和备中心各主节点之间的复制流通常是异步的,当主中心发生故障时,主......
  • SpringBoot拦截器和动态代理有什么区别?
    在SpringBoot中,拦截器和动态代理都是用来实现功能增强的,所以在很多时候,有人会认为拦截器的底层是通过动态代理实现的,所以本文就来盘点一下他们两的区别,以及拦截器的底层实现。1.拦截器拦截器(Interceptor)准确来说在SpringMVC中的一个很重要的组件,用于拦截Controller的请......
  • SpringBoot 自定义starter汇总
    1、SpringBootstarter机制SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息......
  • SpringBoot打成jar运行后无法读取resources里的文件
    开发一个word替换功能时,因替换其中的内容功能需要word模版,就把word_replace_tpl.docx模版文件放到resources下在开发环境中通过下面方法能读取word_replace_tpl.docx文件,但是打成jar包在linux下运行后无法找到文件了Filefile=ResourceUtils.getFile(ResourceUtils.CL......
  • springboot整合rocketMQ——消费者
    依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/......