我正在开发一个java-spring启动应用程序。我在Cassandra数据库中存储了一些应用程序的特定常量值,我需要在每次从数据库中获取这些常量值的请求时访问数据库,这是一种不好的做法。所以我想在应用程序启动时获取这些值并将其存储在静态变量中并在整个应用程序中访问这些变量。但是我在这里面临的问题是,在应用程序启动之后,一旦从DB获取数据并存储在静态变量中,并且如果我们更改数据库中的值,这些静态变量不会使用新值更新,直到我重启了应用程序。当我们更改数据库中的值时,是否有更新这些静态变量的最佳方法,而无需重新启动应用程序。请帮助我。提前致谢。
答案 0 :(得分:0)
一种方法可能是使用某种消息代理(如Kafka(http://kafka.apache.org/))向订阅者发布数据库更改,或者(没有kafka)使用某种推送通知。
可能的设置可能是这样的:
Service2用于更改“常量”。所以你不应该直接使用cqlsh更改这些值,而只使用第二个服务。 成功更改后,您现在可以将http请求发送到常规spring-boot应用程序的“刷新”端点。然后,此刷新通知可以触发应用程序中的更新。这基本上是一种回调方法。
第二种更灵活的方式可能是使用像kafka这样的消息代理。 使用kafka,您仍然可以创建一个用于更改“常量”的服务。这里的区别在于,在您成功更改数据后,您将向kafka发送消息。 Kafka现在可以将您的消息发送到每个注册为订户的服务。使用此选项,您可以自由添加多个订阅者,以防您有更多服务,具体取决于您的“常量”。
就我个人而言,我不是投票解决方案的粉丝,如果存在更改,您每隔x秒检查一次。