也许这是一个非常基本的Java问题。如果是的话请原谅我。
我有一个 Spring Boot 项目,需要为每个注册用户自动(在后台)定期连接到网站并下载许多文档和/或检查更改。
“下载/检查”系统是外部开发的。每个方法都是静态的。
当我想要多个同时执行时,我是否认为这是一个问题? 即使它通过参数有所有具体的连接参数?
考虑到这一点,我删除了几乎每个方法上的静态注释。现在我需要为每次执行创建一个新实例。
当我开始将它添加到我的 Spring boot 项目中时,我意识到有很多服务可以同时连接到 Web 服务,而我什至不关心并发性。
据我所知,每个服务都是一个单例。正确的?所以每个连接都没有新的实例。对吗?
我的问题是:如果我碰巧有 100 个用户...我应该如何集成 jsoup 代码?
- 我应该从服务创建新实例吗?
- 我是否应该将其转换为服务本身,然后将其 @Autowire 到触发流程的服务?
- 将其设为静态更好吗? (这个我不这么认为,但也许我错了)
- 还有其他选择吗?
如果可能,请添加我应该遵循您的建议的原因。
感谢大家的帮助。
最佳答案
首先我想说,如果你的类不维护任何状态,那么如果一切都是静态的,那实际上是一件好事,因为这让你更接近函数式编程。如果您将所有内容作为参数传递给方法,并且类(不是方法)中没有任何状态,则所有内容都保留在堆栈中,不在线程之间共享。长话短说:线程安全。
如果您在类中维护任何类型的状态(无论是服务还是组件),那么您必须确保它们以线程安全的方式执行。最简单的方法之一是将特定 bean 的 @Scope
更改为原型(prototype)或实例请求,因为您将其作为 Web 应用程序运行。
关于java - 如何同时进行多个jsoup session (Spring boot项目和并发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713589/