Java 如何获取执行异步方法的用户?
我有一个运行许多异步进程的应用程序,这些进程可能需要十到二十分钟 在出错时,我使用一个AsyncUncaughtExceptionHandler,它只写一个日志错误。我需要通知用户发生了错误 现在我使用的是“DelegatingSecurityContextAsyncTaskExecutor”,它在线程之间共享spring安全用户。但当我注销时,它被删除,上下文中的用户为空 这对我来说不是很好,我希望运行该方法的用户,而不是上下文中的当前用户,我需要他向您的个人邮箱发送消息 如何获取执行该方法的用户 我的代码:Java 如何获取执行异步方法的用户?,java,spring,asynchronous,spring-security,Java,Spring,Asynchronous,Spring Security,我有一个运行许多异步进程的应用程序,这些进程可能需要十到二十分钟 在出错时,我使用一个AsyncUncaughtExceptionHandler,它只写一个日志错误。我需要通知用户发生了错误 现在我使用的是“DelegatingSecurityContextAsyncTaskExecutor”,它在线程之间共享spring安全用户。但当我注销时,它被删除,上下文中的用户为空 这对我来说不是很好,我希望运行该方法的用户,而不是上下文中的当前用户,我需要他向您的个人邮箱发送消息 如何获取执行该方法的
@Configuration
@EnableAsync
public class SpringAsyncConfig implements AsyncConfigurer {
@Override
@Bean(name = "asyncExecutor")
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(1);
executor.setThreadGroupName("MyCustomExecutor");
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setBeanName("asyncExecutor");
executor.initialize();
DelegatingSecurityContextAsyncTaskExecutor securityExecutor = new DelegatingSecurityContextAsyncTaskExecutor(executor);
return securityExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new CustomAsyncExceptionHandler();
}
}
public class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
private static final Logger LOG = LogManager.getLogger(CustomAsyncExceptionHandler.class);
@Override
public void handleUncaughtException(Throwable ex, Method method, Object... params) {
LOG.error(
String.format("Error in async method %s with params: %s: Excepcion: %s",
method.getName(), params.toString(), ExceptionUtils.getStackTrace(ex)), ex);
}
}
我猜您的注销tell的spring安全性将使用户登录无效。我猜您的注销tell的spring安全性将使用户登录无效。