在 Spring 服务类的所有实例之间共享一个 hashmap 实例

2024-01-21

我打算创建一个实时计数器。因此,一个用户可以增加特定键的计数器值。而另一个则通过 ajax 请求(在循环中或使用某种长轮询方法)获取更新的计数值。我将使用 spring 控制器,它将注入服务类我可以执行如下操作,还是有更好的方法:

@Service
public MyService{

//instance variable in spring injected service class, not sure if this correct
static final Map<String, Integer> myMap;


public void add(String key){
  Integer count = myMap.get(key);
  count++;
  myMap.put(key, count);
}

//accessed via ajax loop (and controller), if value changes update display
public Integer getCount(String key){
  return myMap.get(key)
}

@PostConstruct
public load(){
  myMap = new HashMap<String, Integer>(10){{//initialize}};
}

Edit有几个答案,但尚不清楚哪个是最好的:同步添加方法?在另一个类(带注释的存储库)中创建映射并注入它?还有别的吗?


可以,但需要注意这些问题:

  • 地图最初是空的,但你从不检查空计数器;
  • add() 方法不会修改地图中的计数器。由于 Integer 是不可变的,因此您需要在递增计数器后将其放回映射中。或者您需要在地图内存储可变计数器
  • 多个线程在没有任何同步的情况下访问地图,这将导致错误、不稳定的行为或异常
  • 如果您的应用程序集群在多个服务器之间,此策略显然会失败
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring 服务类的所有实例之间共享一个 hashmap 实例 的相关文章

随机推荐

  • Jenkins 持续交付管道根据输入跳过阶段

    简化的管道将类似于 1 build 2 unit test 3 deploy to dev 4 integration tests 5 deploy to prod 对于步骤 5 我设置了 Jenkins 管道输入命令 我们不会在每次提交时
  • 在 Javascript 中将 Uint8Array 转换为数组

    我有 Uint8Array 实例 其中包含某个文件的二进制数据 我想将数据发送到服务器 它将被反序列化为 byte 但是如果我发送 Uint8Array 就会出现反序列化错误 所以 我想将它转换为数组 因为数组反序列化得很好 我这样做 fu
  • Reactjs :状态的 ShouldComponentUpdate

    我该如何使用shouldComponentUpdate对于各州 我可以检查 shouldComponentUpdate nextProps nextState return this state value nextState value
  • 找不到函数plot.gam

    我正在阅读 R 中应用统计学习简介 ISLR 我被困在第 295 页上的部分 即广义加性模型实验室 当我运行以下代码时出现错误Error in plot gam gam1 se TRUE col red could not find fun
  • 如何在 Intellitrace Events 中跟踪异步数据库操作?

    我正在尝试查看我的应用程序使用的一些查询实体框架做 在我的方法中不是async我可以正常看到查询 public List
  • 如何获取 msbuild.exe?未安装VS2008时可以构建.vcproj吗?

    我知道如果我安装 Visual Studio 2005 或 2008 将会安装 msbuild 我知道如果我安装 NET Framework SDK 也会安装 msbuild 从 NET 3 0开始 我认为不再有单独的 NET Framew
  • Crontab 无法在 Mac OS 上运行 python

    我已经找到了我能找到的每一个答案并尝试了一切 但我仍然无法让我的 crontab 运行 python 我什至创建了一个 shell 脚本来运行 python 认为隔离会有所帮助 但它仍然不起作用 我在 crontab 中有以下条目 echo
  • 如何只输出第一行的git日志?

    我正在尝试自定义格式git log 我希望所有提交都显示在一行中 每行应该只显示提交消息的第一行 I 发现 http book git scm com 3 reviewing history git log html that git lo
  • 图像背景透明GIMP [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一些 jpg 图像 我需要有一个透明的背景 我将在网页中添加这些图像 并且我只需要查看图像的主要元素和下面的网页 有谁知道如何将图像转换为透明背景
  • ModelMapper:根据Child类选择映射

    TL DR 我想以从 AbstractParent 映射到 AbstractParentDTO 的方式使用 modelMapper 然后在 ModelMapper Config 中调用每个子类的特定映射器 然后跳过其余的 抽象类 映射 这怎
  • 为什么我收到 jQuery“ui.element 未定义”错误?

    我有以下内容 widgets ul sortable connectWith widgets ul opacity 0 7 start function e ui fromWidgetPosition ui item prevAll len
  • 有什么方法可以让 CSS 嵌套时可见性起作用吗?

    所以我一直认为如果父容器设置了属性 它就会取代子容器 因此 就我而言 我希望隐藏父容器 但子元素的可见性为可见 但似乎子元素的可见性属性取代了父元素 因此仍然会显示 但问题是 如果使用显示属性 它会按照我想要的方式工作 这是 HTML di
  • 检测 CAShapeLayer 触摸

    我通过覆盖绘制矩形创建了一个蜘蛛图 我使用核心图形 CAShapeLayer 来绘制我的区域 屏幕上创建了多个 CAShapeLayer 区域 我想检测当用户触摸时触摸了哪一层 但是我不明白怎么办 首先 您不应该在 drawRect 中绘制
  • git pull --rebase 导致意外的图表

    我在分行工作 foo 我没有未分阶段的更改 没有工作更改 完全干净的状态 其中HEAD foo origin foo根据我的盒子 git status On branch foo Untracked files use git add
  • 使用 Python 重命名目录中的一堆文件时出现问题

    import os def rename files file list os listdir r G Python Learning prank print file list saved path os getcwd print Cur
  • 仅当 JavaScript 中的三元运算符中条件为 true 时才进行赋值

    在 JavaScript 中可以做这样的事情吗 max max lt b b 换句话说 仅当条件为真时才赋值 如果条件为假 则不执行任何操作 不赋值 这可能吗 不要使用三元运算符 https developer mozilla org en
  • 使用 php mysql jquery ajax 更新选择框的值

    我在改变方面面临重大问题status in
  • jvm中的Java对象ID

    调试时 Eclipse 中的对象值附近会显示一个对象 ID 例如 28332是会话对象的ID 另一个例子 waiting for id 101 显示在 调试 面板中 这些 ID 既不是哈希码也不是System identityHashCod
  • 在 Colaboratory 中保存变量状态

    当我运行一个协作实验室中的 Python 脚本 https drive google com file d 1aHl XTDhs24XQ4qcdTgkk2cfF3iatpxj view usp sharing 它正在运行所有以前的代码单元
  • 在 Spring 服务类的所有实例之间共享一个 hashmap 实例

    我打算创建一个实时计数器 因此 一个用户可以增加特定键的计数器值 而另一个则通过 ajax 请求 在循环中或使用某种长轮询方法 获取更新的计数值 我将使用 spring 控制器 它将注入服务类我可以执行如下操作 还是有更好的方法 Servi