【问题标题】:Can System.setProperty be used per request? [duplicate]System.setProperty 可以按请求使用吗? [复制]
【发布时间】:2020-11-23 13:20:22
【问题描述】:

我需要为每个对 REST API 的请求设置不同的系统属性。 System.setProperty("filePath", file.getAbsolutePath());可以用吗?它是线程安全的吗?在处理当前请求之前,当多个/最新请求到达服务器时,它会用新值覆盖旧值吗?

【问题讨论】:

  • 如果是每个请求,为什么要在系统级别设置它?
  • 你为什么要那样做……这太不清楚了
  • 我需要构建一个 DefaultConfigurationBuilder,它需要一个配置文件,其中配置文件有这个 - fileName="${sys:filePath}" - filePath 是动态的,并且每个请求都会更改。 @Federico klez 库洛卡

标签: java


【解决方案1】:

这在很大程度上取决于您的确切设置。这个here 建议您可以在不同的 websphere 容器中设置不同的系统属性。

因此,如果您有这样的设置,并且如果您可以保证一次只有 一个 客户端使用一个端点,这在理论上是可行的。

但是 if 链告诉我们真正的答案:忘记这个想法。系统属性不是打算这样使用的!

如果该 REST 服务的不同用户需要“一个细节”与其他运行相比有所不同,那么这绝对意味着:这需要是客户端在调用时传递给服务器的 参数那个 REST 服务。


【讨论】:

    【解决方案2】:

    你是对的,每个System.setProperty方法调用都会覆盖环境变量。

    如果您不需要覆盖,有很多解决方案:

    1. 使用 servlet 容器上下文存储每个请求的文件路径
    2. 使用Java ThreadLocal 手动存储属性。但请注意,您必须在请求结束后对其进行清理。

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 2013-04-08
      • 2017-02-25
      • 1970-01-01
      • 2012-04-13
      • 2020-07-28
      • 1970-01-01
      • 2017-04-18
      • 2019-10-17
      相关资源
      最近更新 更多