刷新Spring bean实例属性定期最佳实践?

时间:2017-02-08 16:54:46

标签: java spring amazon-web-services concurrency

我有一个Spring组件,它调用AWS来做一些事情。它获取持续时间<= 1h的临时会话凭证,以便在我的应用程序启动时初始化AWS服务客户端。 AWS服务客户端设置为bean的实例属性。然后在这个小时之后,我需要使用这个bean阻塞所有线程并刷新服务客户端使用的临时会话凭证。

有没有推荐的方法呢?任何提示/线索都表示赞赏

1 个答案:

答案 0 :(得分:3)

我认为将它作为一种代理实现它是最好的(也是最简单的)。

首先,为要刷新的对象创建一个类。让我们称之为RefreshableProperty

然后您需要具有以下职责的代理:

  • 它会被注入任何需要访问RefreshableProperty
  • 的地方
  • 它将具有AtomicReference<RefreshableProperty>
  • 类型字段的实例
  • 它可以有一个用@Scheduled注释的方法(带有一些cron表达式),可以定期调用
  • 此方法将连接到您的配置服务器并下载新设置,这些设置将放入RefreshableProperty的新实例
  • 在此类操作结束时,您的代码应交换引用,以便它指向新对象

如果你需要每小时完成一次,那么这将是一项艰巨的任务,我强烈建议不要这样做,因为将此服务客户端与Spring应用程序同步会非常棘手。