【问题标题】:Is it advisable to create a request context with ThreadLocal on the Spark framework是否建议在 Spark 框架上使用 ThreadLocal 创建请求上下文
【发布时间】:2019-10-01 22:10:54
【问题描述】:

使用Spark web framework - 我想避免将所有参数传递给每个方法签名(请求用户等)。是否适合使用具有静态 ThreadLocal 属性的上下文?

我猜我们无法完全控制哪个线程为请求提供服务,但猜测在 Spark API/边界上的每次调用都进行初始化应该没问题。

【问题讨论】:

  • 也许您可以在会话中存储 userId 等信息
  • 如果我根本不使用会话(无状态服务器),我可以按照建议使用 ThreadLocal 来存储东西吗?我之前在其他框架结构上使用过它,但我想知道 Spark 是否会有任何问题(比如线程共享或其他东西,这实际上对性能有好处)。或者我可以使用 request.session 吗,即使我没有使用会话,唯一的缺点是它会重置每个请求(就像我想要的那样)?还是有其他注意事项?

标签: spark-java


【解决方案1】:

我摆弄了一下,我想我找到了解决这个问题的好方法。根据文档:

/**
 * Sets an attribute on the request
 * (can be fetched in filters/routes later in the chain)
 *
 * @param attribute The attribute
 * @param value     The attribute value
 */
public void attribute(String attribute, Object value) {
    /* ... */
}

所以你可以在请求本身中设置一个属性,然后再获取它。很整洁。

【讨论】:

  • 谢谢,但我不想将请求传递到业务逻辑并创建对网络库的依赖。
  • 有道理;在我的情况下,我只会在已经可以访问该对象的控制器中使用这些数据。
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2012-01-13
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多