# 当调用ElasticsearchClient的query方法时, static字段丢失或者改变, 这是为什么呀

**URL:** <https://discuss.elastic.co/t/elasticsearchclient-query-static/334181>\
**Category:** 中文提问与讨论\
**Created:** [May 24, 2023, 7:23am UTC](https://discuss.elastic.co/t/elasticsearchclient-query-static/334181 "2023-05-24T07:23:49Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![xiaochunyong](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/xiaochunyong/32/121365_2.png) [@xiaochunyong](https://discuss.elastic.co/u/xiaochunyong)\
**Post date:** [May 24, 2023, 7:23am UTC](https://discuss.elastic.co/t/elasticsearchclient-query-static/334181/1 "2023-05-24T07:23:49Z")

</div>

Java API client version: 7.17.10  
Java version: jdk-17.0.3.1  
Elasticsearch Version: 7.17

我有个代码仓库可以复现这个问题: [GitHub - xiaochunyong/elasticsearch-threadlocal-reference-changed](https://github.com/xiaochunyong/elasticsearch-threadlocal-reference-changed)

有一个类UserHolder, 里面有个ThreadLocal变量

```java
public class UserHolder {

    public static ThreadLocal<String> holder = new ThreadLocal<>();

}

```

当在PostController中调用ElasticsearchClient.query方法时, 进入query方法前和进入方法后, currentThread不一样

```java
@RestController
@RequestMapping("/api/post")
public class PostController {

    @Autowired
    private ElasticsearchClient client;

    public static Thread currentThread;

    public static String welcome = "hello1";

    @GetMapping
    public Object query() throws IOException {
        currentThread = Thread.currentThread();
        welcome = "hello2";

        SearchResponse<ObjectNode> search = client.search(s -> s
                        .index("post")
                        .query(b -> b
                                .matchAll(b2 -> b2)
                        ),
                ObjectNode.class
        );

        return search.hits().hits();
    }

}

```

 ![Outside the query method](https://us1.discourse-cdn.com/elastic/original/3X/6/c/6cb29e3695e6b524086da775a39c15324f40325d.png)

---

<div class="post-metadata">

**Author:** ![xiaochunyong](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/xiaochunyong/32/121365_2.png) [@xiaochunyong](https://discuss.elastic.co/u/xiaochunyong)\
**Post date:** [May 24, 2023, 7:24am UTC](https://discuss.elastic.co/t/elasticsearchclient-query-static/334181/2 "2023-05-24T07:24:26Z")

</div>

![inside the query method](https://us1.discourse-cdn.com/elastic/original/3X/3/2/3294261c065b2f52644c28d0b4e1edb7112057c0.png)

---

<div class="post-metadata">

**Author:** ![xiaochunyong](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/xiaochunyong/32/121365_2.png) [@xiaochunyong](https://discuss.elastic.co/u/xiaochunyong)\
**Post date:** [May 24, 2023, 9:24am UTC](https://discuss.elastic.co/t/elasticsearchclient-query-static/334181/3 "2023-05-24T09:24:28Z")

</div>

I found the reason. I used spring-boot-devtools. The class loader used by the class under src is different from the class loader in the jar package.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [June 21, 2023, 9:25am UTC](https://discuss.elastic.co/t/elasticsearchclient-query-static/334181/4 "2023-06-21T09:25:10Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
