相关疑难解决方法(0)

在Threads中访问作用域代理bean

我有一个在tomcat中运行的Web应用程序,我正在使用ThreadPool(Java 5 ExecutorService)并行运行IO密集型操作以提高性能.我想让每个池化线程中使用的一些bean都在请求范围内,但ThreadPool中的Threads无法访问spring上下文并获得代理失败.关于如何为ThreadPool中的线程提供弹簧上下文以解决代理失败的任何想法?

我猜测必须有一种方法来注册/取消注册ThreadPool中的每个线程,每个任务使用spring,但是没有任何运气找到如何做到这一点.

谢谢!

java spring spring-mvc threadpool

16
推荐指数
2
解决办法
9712
查看次数

将HttpServletRequest注入Controller

据我所知,默认情况下是Spring MVC单例中的控制器.HttpServletRequest传递给控制器​​处理程序方法.而且它的确定,虽然HttpServletRequest是在请求范围内,但我经常看到HttpServletRequest获取@Autowired到控制器领域,就像这样:

@Controller("CMSProductComponentController")
@RequestMapping(CMSProductComponentController.CONTROLLER_PATH)
public class CMSProductComponentController {
    @Autowired
    private HttpServletRequest request;
}
Run Code Online (Sandbox Code Playgroud)

这可能是个问题吗?更一般的问题:如果将一个reqeust-scoped组件注入单例中会发生什么?

java spring spring-mvc

13
推荐指数
1
解决办法
8968
查看次数

在多线程Web应用程序中访问请求范围的bean

场景:我们有一个在Websphere中运行的Spring托管Web应用程序.(Spring 3.0.x,WAS 7)webapp通过Spring WorkManagerTaskExecutor(配置线程池大小为10)利用Websphere的工作管理器来执行计算密集型数据库读取操作.所以基本上,一个请求来生成,比方说,生成10个不同的文档.要生成文档,只需要db读取来收集/处理数据.因此,我们基本上产生10个线程来处理10个文档,最后收集10个工作者返回的10个文档并合并它们并向客户端写回一个大响应.我们确定的是,当10个线程正在收集/处理数据时,会产生大量类似的数据库调用.所以我们想出的是围绕最常执行的db方法创建一个Aspect来缓存响应.方面配置为单例,方面使用的缓存自动连接到方面,并将范围设置为请求范围,以便每个请求都有自己的缓存.

问题:现在这个方法的问题是,当线程正在进行数据库调用而Aspect是interjects时,我们会遇到java.lang.IllegalStateException: No thread-bound request found异常.我理解的是完全有效的,因为线程正在请求上下文之外执行.

有没有办法绕过这个问题?是否可以将带有请求范围缓存的方面应用于这些线程调用的方法?

java spring multithreading

8
推荐指数
1
解决办法
1万
查看次数

bean的会话范围如何在Spring MVC应用程序中运行?

我是Spring MVC的新手,我对bean 的会话范围有疑问.

进入一个项目我有一个Cartbean,这个:

@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Cart {


    private Map<Product, Integer> contents = new HashMap<>();

    public Map<Product, Integer> getContents() {
        return contents;
    }

    public Set<Product> getProducts() {
        return contents.keySet();
    }

    public void addProduct(Product product, int count) {

        if (contents.containsKey(product)) {
            contents.put(product, contents.get(product) + count);
        } 
        else {
            contents.put(product, count);
        }
    }


    public void removeProduct(Product product) {
        contents.remove(product);
    }

    public void clearCart() {
        contents.clear();
    }

    @Override
    public String toString() {
        return contents.toString(); …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-session

2
推荐指数
1
解决办法
9280
查看次数