Java 在应用程序启动时从Cassandra加载数据

Java 在应用程序启动时从Cassandra加载数据,java,spring,cassandra,Java,Spring,Cassandra,我正在开发一个JavaSpring启动应用程序。我在Cassandra数据库中存储了一些特定于应用程序的常量值,我需要针对每个请求访问数据库,以便从数据库中获取这些常量值,这是一种糟糕的做法。因此,我考虑在应用程序启动时获取这些值,并将其存储在静态变量中,然后在整个应用程序中访问这些变量。但我在这里面临的问题是,在应用程序启动之后,一旦数据从数据库中提取并存储在静态变量中,如果我们更改数据库中的值,这些静态变量将不会用新值更新,直到我重新启动应用程序。当我们更改数据库中的值时,是否有最好的方法来

我正在开发一个JavaSpring启动应用程序。我在Cassandra数据库中存储了一些特定于应用程序的常量值,我需要针对每个请求访问数据库,以便从数据库中获取这些常量值,这是一种糟糕的做法。因此,我考虑在应用程序启动时获取这些值,并将其存储在静态变量中,然后在整个应用程序中访问这些变量。但我在这里面临的问题是,在应用程序启动之后,一旦数据从数据库中提取并存储在静态变量中,如果我们更改数据库中的值,这些静态变量将不会用新值更新,直到我重新启动应用程序。当我们更改数据库中的值时,是否有最好的方法来更新这些静态变量,而无需重新启动应用程序。请帮帮我。提前谢谢

一种方法可以是使用某种消息代理(如Kafka())将数据库更改发布给订阅者,或者(在没有Kafka的情况下)使用某种推送通知

可能的设置如下所示:

Service2用于更改您的“常量”。因此,您不应该直接使用cqlsh更改这些值,而应该仅使用第二个服务。 成功更改后,现在可以向常规spring引导应用程序的“刷新”端点发送http请求。然后,此刷新通知可以触发应用程序中的更新。这基本上是一种回调方法

第二种也是更灵活的方法是使用像kafka这样的消息代理。 使用kafka,您仍然可以创建一个用于更改“常量”的服务。这里的区别在于,成功更改数据后,您将向卡夫卡发送一条消息。卡夫卡现在可以将您的消息发送到每个注册为订户的服务。使用此选项,您可以自由添加多个订户,以防根据“常数”拥有更多服务


就我个人而言,我不喜欢轮询解决方案,即每x秒检查一次是否存在更改

一种方法可以是使用某种消息代理(如Kafka())将数据库更改发布给订阅者,或者(在没有Kafka的情况下)使用某种推送通知

可能的设置如下所示:

Service2用于更改您的“常量”。因此,您不应该直接使用cqlsh更改这些值,而应该仅使用第二个服务。 成功更改后,现在可以向常规spring引导应用程序的“刷新”端点发送http请求。然后,此刷新通知可以触发应用程序中的更新。这基本上是一种回调方法

第二种也是更灵活的方法是使用像kafka这样的消息代理。 使用kafka,您仍然可以创建一个用于更改“常量”的服务。这里的区别在于,成功更改数据后,您将向卡夫卡发送一条消息。卡夫卡现在可以将您的消息发送到每个注册为订户的服务。使用此选项,您可以自由添加多个订户,以防根据“常数”拥有更多服务


就我个人而言,我不喜欢轮询解决方案,即每x秒检查一次是否存在更改

显示一些您尝试过的代码。“典型”的解决方案是在应用程序中运行计时器循环,以定期轮询数据库(例如每分钟轮询一次)。这将导致应用程序在更改后的60秒内获得最新值。显示一些您尝试过的代码。“典型”的解决方案是在应用程序中运行计时器循环,以定期轮询数据库(例如每分钟轮询一次)。这将导致应用程序在更改后60秒内获取最新值。。