我在tomcat中运行一个Web应用程序,其中使用ThreadPool(Java 5
ExecutorService)并行运行IO密集型操作以提高性能。我希望在每个合并线程中使用的某些bean在请求范围内,但是ThreadPool中的Threads无法访问spring上下文并导致代理失败。关于如何使Spring上下文可用于ThreadPool中的线程来解决代理故障的任何想法?
我猜想必须有一种方法可以用spring为每个任务在ThreadPool中注册/注销每个线程,但是还没有运气找到如何做到这一点。
谢谢!
我将以下超类用于需要访问请求范围的任务。基本上,您可以扩展它并在onRun()方法中实现您的逻辑。
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
/**
* @author Eugene Kuleshov
*/
public abstract class RequestAwareRunnable implements Runnable {
private final RequestAttributes requestAttributes;
private Thread thread;
public RequestAwareRunnable() {
this.requestAttributes = RequestContextHolder.getRequestAttributes();
this.thread = Thread.currentThread();
}
public void run() {
try {
RequestContextHolder.setRequestAttributes(requestAttributes);
onRun();
} finally {
if (Thread.currentThread() != thread) {
RequestContextHolder.resetRequestAttributes();
}
thread = null;
}
}
protected abstract void onRun();
}
问题内容: 我正在为基于Web的幻灯片显示构建应用程序,其中一个“主”用户可以在幻灯片之间移动,每个人的浏览器都可以跟随。为此,我使用websockets和Redis作为全局通道来发送消息。每个连接的客户端都将信息存储在数组中。然后,我有一个单独的线程用于订阅Redis通道,其中定义了一个“ on.message”块,该块应将消息发送给数组中的每个人,但是该数组在此块内为空(在该块中的其他任何地方
我在spring中尝试使用会话范围的bean时出错,错误是: 我的配置是:网络。xml: 豆子: 我一直在寻找这个问题,我所找到的是添加以下行web.xml: 这解决了问题,但副作用是,我所有的@Scheduled注释方法都运行了两次,我认为这是因为spring创建了两个上下文。 阅读Spring文档它说: DispatcherServlet、RequestContextListener和Requ
问题内容: 正如我们所知道Spring使用代理来增加功能(和举例)。有两种选择- 使用JDK动态代理(该类必须实现非空接口),或使用CGLIB代码生成器生成子类。我一直认为proxyMode允许我在JDK动态代理和CGLIB之间进行选择。 但是我能够创建一个示例,说明我的假设是错误的: 情况1: 单身人士: 原型: 主要: 输出: 在这里我们可以看到两件事: 只实例化了 一次 。 为了添加的功能,
众所周知,Spring使用代理添加功能(例如和)。有两种选择--使用JDK动态代理(类必须实现非空接口),或者使用CGLIB代码生成器生成子类。我一直认为proxyMode允许我在JDK动态代理和CGLIB之间进行选择。 但我能创造一个例子,说明我的假设是错误的: 单身: 这里我们可以看到两点: 只实例化了一次。 要为添加功能,Spring使用了cglib。 让我更正定义: 实例化了3次。 要为添
我试图制作一个图形用户界面,不断绘制从微处理器接收的信号。我试图通过只使用类来实现这一点,但是失败了,因为只有GUI类是oppend。现在我已经实现了线程(或者至少我认为我有!?)但是每个线程只运行一次。这让我相信我不明白tkinter中的主循环是如何工作的,所以我可以重新编写我的代码,让线程变得活跃吗? 我希望你们中的一些人能帮助我把这段代码变成一个实时更新绘图的程序。 但是它仍然没有更新plo
问题内容: 我正在寻找访问指令中“父”范围的任何方式。范围,超越,要求,从上方传入变量(或范围本身)的任何组合,等等。我完全愿意向后弯腰,但我想避免某些完全不可靠或难以维护的事情。例如,我知道我现在可以通过从preLink参数中获取并对其范围进行迭代以找到概念上的“父级” 来做到这一点。 重要说明 是,该指令必须在同一父范围内可重用。因此,默认行为(作用域:false)对我不起作用。我需要为指令的