EL1057E: В контексте не зарегистрирован преобразователь бина для разрешения доступа к бину - PullRequest
0 голосов
/ 12 марта 2020

Я пытался писать на Elasticsearch с несколькими индексами. В настоящее время я установил Spring v5.2.3.RELEASE и Spring Boot v2.2.4.RELEASE.

Я нашел несколько решений, позволяющих использовать несколько индексов с использованием технологии SPEL Spring, но я не могу заставить ее работать.

В настоящее время у меня есть эти файлы:

ElasticDBDbConfig. java

package edu.unifi.disit.datamanager.config;
@Configuration
@EnableTransactionManagement
@EnableElasticsearchRepositories(basePackages = { "edu.unifi.disit.datamanager.datamodel.elasticdb"})
public class ElasticDBDbConfig {

   @Value("${elasticsearch.protocol}")
   private String esProtocol;

   @Value("${elasticsearch.host}")
   private String esHost;

   @Value("${elasticsearch.port}")
   private int esPort;

   @Value("${elasticsearch.clustername}")
   private String esClusterName;

   @Bean(destroyMethod = "close")
     public RestHighLevelClient elasticsearchClient() { 
        return new RestHighLevelClient(RestClient.builder(new HttpHost(esHost,esPort,esProtocol)));
    }

@Bean
public ElasticsearchRestTemplate elasticsearchTemplate() {
    ElasticsearchRestTemplate elasticsearchTemplate = new 
    ElasticsearchRestTemplate(elasticsearchClient());

    elasticsearchTemplate.putMapping(KPIElasticValue.class);

    return elasticsearchTemplate;
}

ConfigIndexBean. java

package edu.unifi.disit.datamanager.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Configuration
@Component("configIndexBean")
public class ConfigIndexBean {

@Value("${elasticsearch.dummyIndex}")
private String indexName;

public String getIndexName() {
    return indexName;
}

public void setIndexName(String indexName) {
    this.indexName = indexName;
}

}

KPIElasticValue. java

package edu.unifi.disit.datamanager.datamodel.elasticdb;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Entity
@JsonSerialize(using = KPIElasticValueSerializer.class)
@JsonDeserialize(using = KPIElasticValueDeserializer.class)
@ComponentScan(basePackages = "edu.unifi.disit.datamanager.config")
@Document(type = "_doc", indexName = "#{@configIndexBean.getIndexName()}")
public class KPIElasticValue {

Есть ли у вас какие-либо идеи?

Я также пытаюсь

@Document(type = "_doc", indexName = "#{configIndexBean.getIndexName()}")
@Document(type = "_doc", indexName = "#{configIndexBean.indexName}")

Исключение составляет:

EL1057E: в преобразователе компонентов не зарегистрировано контекст для разрешения доступа к бину 'configIndexBean'

1 Ответ

0 голосов
/ 14 марта 2020

Я решил так:

ConfigIndexBean. java

package edu.unifi.disit.datamanager.config;

public class ConfigIndexBean {

    private static String indexName = "dummy";

    public static final String getIndexName() {
        return indexName;
    }

    public static void setIndexName(String indexName) {
        ConfigIndexBean.indexName = indexName;
    }

}

и аннотация на KPIElasticValue. java:

@Document(type = "_doc",indexName = "# 
{T(edu.unifi.disit.datamanager.config.ConfigIndexBean).getIndexName()}")

В сервисах перед вызовом репозитория я изменяю индекс следующим образом:

ConfigIndexBean.setIndexName("newindex");
...