java - 设计一个 "updatable"静态集与 Spring 一起使用?

标签 java spring spring-mvc set

我需要创建一个包含大约 10,000 个条目的不可变集,每周“更新”(重新创建)一次。我一直在阅读 Executor 框架来进行更新,但我不确定如何在利用 Spring 的同时实现端到端功能。更具描述性:

  1. 我的服务器上的一个文件中存储着 10,000 个 ID 号码的列表。该文件每 3-4 周更新一次,并且大小会增加(但可能永远不会超过 20000 个条目)

  2. 我的服务中需要此列表的方法每天被调用数千次,因此我希望将该列表存储在内存中一次,而不是每次调用该方法时都获取它

  3. 我想通过读取服务器上的文件并重新创建集合来每周更新一次存储在内存中的列表

在“Springless”Java 中,似乎我可以创建一个具有静态 Set 和每 7 天更新一次集合的单线程 ScheduledExecutor 的类。当我的服务启动时,具有设置/更新线程的类被实例化一次,并且我的“服务”类只是在需要时获取集合。 (不确定这是否是一个好的实现)

使用 Spring 时获得此功能的最佳方法是什么?

最佳答案

我建议使用一些内存数据存储,例如 RedisSpring Data Redis 一起用于存储您的条目并具有非常快的读/写场景。

也就是说,对于当前设计的 Spring 方法:

  1. 为您的作业使用 @EnableScheduling@Scheduled 注释。可以找到指南 here
  2. 使用 @Service 注解标记您的服务,以便 Spring 在组件扫描期间为其生成 Bean(确保包可见)
  3. 为您的集合创建一个非静态 setter ,并让您的计划作业调用它来更新集合。由于您的服务是 Singleton(默认 Spring bean 设置),因此您不必担心服务的所有实例中的静态集都会发生更改。

关于java - 设计一个 "updatable"静态集与 Spring 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43200914/

相关文章:

java - Java 中的 getClass() 实际上返回什么?

捆绑了依赖项的 JavaFX jar

java - Spring 集成 : service activator requires-reply ="false" usage

spring - 使用 Spring MVC 运行 Spring Boot 时抛出空指针异常

java - 如何在 Spring MVC 中使 jsonData 不区分大小写

java - 如何使用 java 流对 JPA 存储库中的字段进行分组和平均并放入新集合中

java - Java中线程或进程的内存使用

spring - 如何使用 Spring Security 3.1 以编程方式登录用户

Spring-Data-Cassandra SchemaAction 不工作

java - Spring mvc 多实体数据库持久化