Java Spring MVC与Soap服务多线程&;多服务器
我正在尝试创建一个具有并发性的小型SpingMVC应用程序。情景: 1:我使用的是带有4个节点的WAS Websphere Server和负载平衡器 2:我有两个模块:(a)Web模块(b)带有Soap Web服务的服务模块 3:Web层将使用WebServiceTemplate调用服务层 4:服务层有一些业务逻辑,例如:计算存款总额、取款总额等 我使用的方法: 1:我在“存款、取款”等业务逻辑方法中使用了同步的,但不起作用 2:我没有在@Controller中使用任何范围(我知道这是Singleton) 问题: 我真的需要将@Controller的作用域更改为“Request”吗 我的假设是:如果我将范围更改为请求,会不会使应用程序变慢?例如,即使只是获取记录(无更改请求),它也会减慢速度Java Spring MVC与Soap服务多线程&;多服务器,java,spring,multithreading,spring-mvc,thread-safety,Java,Spring,Multithreading,Spring Mvc,Thread Safety,我正在尝试创建一个具有并发性的小型SpingMVC应用程序。情景: 1:我使用的是带有4个节点的WAS Websphere Server和负载平衡器 2:我有两个模块:(a)Web模块(b)带有Soap Web服务的服务模块 3:Web层将使用WebServiceTemplate调用服务层 4:服务层有一些业务逻辑,例如:计算存款总额、取款总额等 我使用的方法: 1:我在“存款、取款”等业务逻辑方法中使用了同步的,但不起作用 2:我没有在@Controller中使用任何范围(我知道这是Singl
我们可以使用哪些方法使代码的唯一部分“提取”或“存放”在服务模块中实现线程安全?如果您有4个节点,这意味着您的应用程序部署了4次。因此,使用像
synchronized
关键字这样的本地同步将只使来自该实例的线程在关键部分访问时同步
您必须使用从外部控制同步的东西。为此,我使用了Redis和Java上的Redisson库
提取
或存款
)时,您可以使用RedissonClient获取锁,并在操作完成后释放由于您有两个关键部分:
取款
和存款
,因此在获取锁时必须使用这些(或其他)名称。谢谢!这是一个很好的建议。还有一个问题。我们是否必须将@Controller的“Scope”更改为“Request”呢?@greencheese否。@Controller
应该始终是一个单例,它是处理所有请求的bean。如果您需要某个特定请求中的某些内容,那么可以使用@request
bean。