我正在尝试将我的服务集成到另一项服务(服务B)。为了创建服务B的客户端,我需要获取令牌并在创建客户端时使用它。令牌每72小时到期。令牌过期后,客户端也将过期。所以我需要重新创建客户端。
现在,客户端对象是一个Singleton,在启动时由Spring实例化。我想每72小时重新创建一个这个对象。
我正在考虑使用带有synchronized getInstance的单例。有更好的方法吗?
答案 0 :(得分:2)
Singleton会有最好的方法来做到这一点。获取令牌后,请在获得令牌时保存静态时间戳变量。然后,在getInstance()
函数中,检查当前时间的时间戳,看它是否超过72小时。如果是,请在返回之前获取新标记并重新创建实例,如果不是,则返回实例。
我使用OAuth身份验证做了类似的事情,发现它是一种简单有效的方法。
答案 1 :(得分:1)
如果您每次请求时都需要客户端对象的新实例,则将spring bean的范围从singleton更改为prototype。每次请求时,Container都会创建对象的新实例。
此外,您可以使用quartz调度程序并创建一个作业来重新创建对象(实际上是从弹簧容器中请求新的引用),重复间隔为72小时。您可以按照instructions
轻松地将石英与弹簧结合起来