springbean域线程安全

s8vozzvw  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(517)

我创建了一个spring库,其中有一个调度器,它从config server获取配置并将其注入bean的字段中。见下图:

问题是,在重载情况下,可能会出现线程并发问题。我该怎么防止呢?
一些代码:
这就是用户将如何给出配置键

  1. @AutoConfig("user")
  2. data class ConfigurationWithPrefix (
  3. @ConfigValue("role")
  4. val role: String = ""
  5. )
  6. @AutoConfig
  7. data class ConfigurationWithoutPrefix (
  8. @ConfigValue("user.role")
  9. val role: String = ""
  10. )
  11. ``` `@AutoConfig` 注解将使这个类成为bean。然后我顺便去拿豆子 `@AutoConfig` 注解并将值插入 `@ConfigValue` 钥匙。

field.set(
bean,
valueFromConfig
)

  1. 这个进程发生在另一个线程上,所以在插入字段值时如果我的代码试图访问字段并发性问题就会出现,如何防止呢?
kkbh8khc

kkbh8khc1#

这类似于多线程的高速缓存读/写,对于这种问题,原子引用比没有同步的volatile语义更好。
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html
bean定义可以转换为:

  1. data class ConfigurationWithPrefix (
  2. @ConfigValue("role")
  3. val role: AtomicReference<String> = AtomicReference("")
  4. )
  5. @AutoConfig
  6. data class ConfigurationWithoutPrefix (
  7. @ConfigValue("user.role")
  8. val role: AtomicReference<String> = AtomicReference("")
  9. )

相关问题