在我的 Spring Boot 应用程序中,我有一个指向设置 JSON 文件的 @Setting 注释,但它似乎被完全忽略了。
@Setting(settingPath = "/settings/elasticsearch-settings.json")
@Document(indexName = "hermes", type = "client", shards = 1, replicas = 0, refreshInterval = "-1")
public class Client {
@Id
private String externalId;
private String name;
private String surname;
private String taxNumber;
private String uid;
//getters and setter intentionally left out
}
我的设置文件放在:
src/main/resources/settings/elasticsearch-settings.json
文件内容如下:
{
"analysis": {
"analyzer": {
"my_ngram_analyzer": {
"tokenizer": "my_ngram_tokenizer"
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": "2",
"max_gram": "3",
"token_chars": [
"letter",
"digit"
]
}
}
}
}
当我使用 Elasticsearch REST api 运行它时,它会毫无问题地更改设置,所以我猜 JSON 本身是有效的。但即使我输入了无效的 JSON,或者将文件全部删除,我也什么也得不到,没有来自 Spring 的警告或错误。这就是为什么我猜测注释被完全忽略的原因。
如果它可能与此有关,我还有一个 Elasticsearch 配置类,用于在端口 9200 上公开客户端。它注释为:
@EnableConfigurationProperties(ElasticsearchProperties.class)
还有:
@EnableAutoConfiguration(exclude= { ElasticsearchAutoConfiguration.class })
关于我的主类的注释。
最佳答案
您的 elasticsearch-settings.json
文件缺少 index
元素。试试这样:
{
"index": {
"analysis": {
"analyzer": {
"my_ngram_analyzer": {
"tokenizer": "my_ngram_tokenizer"
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": "2",
"max_gram": "3",
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
关于elasticsearch - Elasticsearch 的 @Setting 注解在 Spring Boot 中被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38550382/