相关疑难解决方法(0)

为什么不鼓励在Java EE容器中生成线程?

我学到的关于Java EE开发的第一件事就是我不应该在Java EE容器中生成我自己的线程.但是当我开始思考它时,我不知道原因.

你能清楚地解释为什么气馁吗?

我相信大多数企业应用程序都需要某种异步工作,如邮件守护进程,空闲会话,清理工作等.

因此,如果确实不应该生成线程,那么在需要时执行它的正确方法是什么?

java multithreading java-ee

118
推荐指数
4
解决办法
5万
查看次数

Spring MVC如何处理多个用户

我使用超过6个月的春天.我无法理解与下面场景相关的这种潜在机制.

我有一个春季网络应用程序.现在我在控制器中自动启动了模型.基于url匹配,它调用各自的方法.我所有的方法都是单身.

现在当两个用户同时打开app时,spring可以并行运行它们并为它们提供结果.我不明白它怎么能这样做.我的意思是,因为bean是单例,它必须等待直到不使用bean或覆盖bean中的数据.但春天工作正常.有人可以用一些类比来解释这种行为.

为了解释我的问题,下面是一段代码:

我的默认控制器很简单:

@Autowired  
private AppModel aModel; 
public AppModel getModel(){
    return aModel;
}
public void setModel(AppModel aModel){
    this.aModel = aModel;
}

@RequestMapping(method = RequestMethod.GET)
public ModelAndView defaultGetter(HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    ModelAndView mav = new ModelAndView(getViewName());
    mav.addObject("model", aModel);
    Runtime.getRuntime().gc();
    return mav;
}
Run Code Online (Sandbox Code Playgroud)

也可以有人告诉我,当两个客户打开应用程序时,我会使用@autowired生成两个单独的模型.如果所有客户端只存在一个模型bean,那么请说客户端1的请求进来,我需要30秒才能获得结果.现在,如果第二个客户端在第3秒发送请求,那么第一个客户端请求是否会被覆盖?

我想我很困惑.有人可以澄清这种魔法是如何发生的吗?

谢谢

spring spring-mvc

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

每个连接的线程与每个请求的线程有什么区别?

能否解释一下在各种servlet实现中实现的两种方法:

  1. 每个连接的线程
  2. 每个请求的线程

以上两种策略中哪一种更好地扩展?为什么?

java multithreading servlets http

26
推荐指数
2
解决办法
2万
查看次数

使用tomcat和spring处理异步http请求

这是我的第一个问题所以请耐心等待我:)

我正在尝试创建一个服务:

  1. 接收包含要查询的URL的HTTP GET请求
  2. 对于单个GET请求,服务将提取URL
  3. 查询有关URL的本地数据库
  4. 如果在DB中找到了结果,它会将其返回给客户端,如果没有,则需要查询一些外部服务(可能需要相对较长的时间才能响应)
  5. 将URL的结果返回给客户端

我在虚拟机和Tomcat7上使用spring运行它.我会事先道歉并提到我对Tomcat很新

无论如何,我期待很多并发GET请求到这个服务(成千上万的同时请求)我基本上想要实现的是尽可能地使这个服务可扩展(如果这是不可能的那么至少一个可以处理数十万个并发请求的服务)

我一直在阅读A LOT关于服务中的异步请求处理,特别是在Tomcat中,但我有些事情对我来说仍然不清楚:

  1. 从官方tomcat网站看来,Tomcat似乎包含许多接受者线程和工作线程数.如果是这样,我为什么要使用AsyncContext?什么是释放Tomcat的工作线程并在我的应用程序中占用不同的线程以执行完全相同的操作的好处?(系统中仍有1个活动线程)
  2. 有点类似于第一个问题,但创建AsyncContext并将其与不同的线程一起使用有什么好处?(来自我的应用程序中创建的线程池的线程)
  3. 关于同样的问题,我在这里看到我也可以返回一个Callable或DeferredResult,并用Tomcat的一个线程或我自己的一个线程处理它.返回Callable或使用DeferredResult而不仅仅是处理来自请求的AsyncContext有什么好处吗?
  4. 另外,如果我决定返回一个可调用的,Tomcat从哪个线程池获取线程来处理我的callable?这里使用的线程是否与我之前提到的Tomcat相同的工作线程?如果是这样,我发布一个Tomcat工作线程并使用另一个工作线程可以获得哪些好处?
  5. 我从Oracle的文档中看到,我可以向AsyncContext传递一个将同时处理的Runnable对象,用于执行此Runnable的线程来自何处?我有控制权吗?另外,将AsyncContext传递给Runnable而不仅仅是将AsyncContext传递给我的一个线程有什么好处?

我为同样的问题提出了很多问题而道歉,但是我和我的同事们争论这些事情一个多星期没有任何具体的答案.

我还有一个更普遍的问题:您认为使我描述的服务具有可扩展性的最佳方法是什么?(暂时不要添加更多机器),您是否可以针对目标解决方案发布任何示例或参考?

我发布了更多我一直在关注的链接链接,但我目前的声誉不允许.我将非常感谢任何可以理解的参考文献或具体的例子,我很乐意澄清任何相关问题

干杯!

java multithreading tomcat spring-mvc asynccontroller

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

Spring MVC - 我可以在 RestController 中自动装配 HttpServletRequest

我可以HttpServletRequest在我的RestController类似下面自动装配吗,servletRequest即使它在高度并发的环境中执行,它也会返回不同的结果。我有一个限制,我不能作为方法参数,因为我正在实现一个自动生成的接口,不会HttpServletRequest作为方法参数。

@RestController
public class MyController implements MyInterface {
        
    @Autowired
    private HttpServletRequest servletRequest;
        
    @Override
    @RequestMapping(value = "/test", produces = {"application/json"}, consumes = {"application/json"}, method = RequestMethod.POST)
    public ResponseEntity<MyResponse> test(@RequestBody final MyRequest payload){
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我已经浏览了这些 SO 问题和其他一些关于此的文章。但只是想确保当我们HttpServletRequest在控制器中自动装配时,它的ScopeRequest

Spring 3 MVC 从控制器访问 HttpRequest

如何分配线程来处理 Servlet 请求?

Spring-Controller 的作用域及其实例变量

如何在 Spring bean 中获取 HttpServletRequest?

如何在 Java 中获取 HTTP 请求头


注意:我确实尝试过这个,它似乎工作正常。但只是想确认即使在高度并发的环境中它也是一个万无一失的解决方案。此外,如果这是正确的方法,如果有人能解释它的工作原理,我将不胜感激。

scope spring-mvc httprequest

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