java - 如何同时进行多个jsoup session (Spring boot项目和并发)

标签 java spring performance concurrency spring-boot

也许这是一个非常基本的Java问题。如果是的话请原谅我。

我有一个 Spring Boot 项目,需要为每个注册用户自动(在后台)定期连接到网站并下载许多文档和/或检查更改。

“下载/检查”系统是外部开发的。每个方法都是静态的。

当我想要多个同时执行时,我是否认为这是一个问题? 即使它通过参数有所有具体的连接参数?

考虑到这一点,我删除了几乎每个方法上的静态注释。现在我需要为每次执行创建一个新实例。

当我开始将它添加到我的 Spring boot 项目中时,我意识到有很多服务可以同时连接到 Web 服务,而我什至不关心并发性。

据我所知,每个服务都是一个单例。正确的?所以每个连接都没有新的实例。对吗?

我的问题是:如果我碰巧有 100 个用户...我应该如何集成 jsoup 代码?

  1. 我应该从服务创建新实例吗?
  2. 我是否应该将其转换为服务本身,然后将其 @Autowire 到触发流程的服务?
  3. 将其设为静态更好吗? (这个我不这么认为,但也许我错了)
  4. 还有其他选择吗?

如果可能,请添加我应该遵循您的建议的原因。

感谢大家的帮助。

最佳答案

首先我想说,如果你的类不维护任何状态,那么如果一切都是静态的,那实际上是一件好事,因为这让你更接近函数式编程。如果您将所有内容作为参数传递给方法,并且类(不是方法)中没有任何状态,则所有内容都保留在堆栈中,不在线程之间共享。长话短说:线程安全。

如果您在类中维护任何类型的状态(无论是服务还是组件),那么您必须确保它们以线程安全的方式执行。最简单的方法之一是将特定 bean 的 @Scope 更改为原型(prototype)或实例请求,因为您将其作为 Web 应用程序运行。

关于java - 如何同时进行多个jsoup session (Spring boot项目和并发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713589/

相关文章:

java - 在 XML 配置中引用 JavaConfig 失败

java - 按可空字段排序,说明项目的位置

c++ - 从 vector 中获取(下一个)最大对象

c# - 有没有更好的方法来测量 CPU 性能而不影响性能?

google-chrome - 为什么我的 Google Chrome 扩展程序的弹出 UI 在外接显示器上滞后,而在笔记本电脑的 native 屏幕上却没有?

java - SQL 查询可在 MySQL 中运行,但不能在 Java 中运行

Java:原始类型变体的代码结构和类命名 - 最佳实践

Spring 3 MVC 资源和标签 <mvc :resources/>

java - 长按无法卸载应用程序

java - 如何优雅地关闭procrun?