web-dev-qa-db-fra.com

Configuration de Spring Boot Elasticsearch

J'ai une application Spring Boot Elasticsearch fonctionnelle qui utilise l'un des deux profils: application.dev.properties ou application.prod.properties. Cette partie fonctionne bien. J'ai du mal à obtenir la lecture elasticsearch externe à partir du fichier application.xxx.properties.

Cela marche:

@Configuration
@PropertySource(value = "classpath:config/elasticsearch.properties")
public class ElasticsearchConfiguration {

    @Resource
    private Environment environment;

    @Bean
    public Client client() {
        TransportClient client = new TransportClient();
        TransportAddress address = new InetSocketTransportAddress(
                environment.getProperty("elasticsearch.Host"), 
                Integer.parseInt(environment.getProperty("elasticsearch.port"))
        );
        client.addTransportAddress(address);        
        return client;
    }

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        return new ElasticsearchTemplate(client());
    }
}

mais évidemment ne résout pas mon problème multi-environnement.

J'ai également essayé les annotations @Value pour les variables Host et port sans succès.

Comment puis-je convertir ce qui précède pour lire ses valeurs dans le fichier de propriétés de l'application ou choisir un autre fichier @PropertySource en fonction du profil que je veux exécuter?

spring.data.elasticsearch.properties.Host = 10.10.1.10
spring.data.elasticsearch.properties.port = 9300

Merci

12
Joe Reymann

Supprimez votre classe de configuration et vos propriétés.

Ajoutez la dépendance suivante

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

Ajoutez simplement le spring.data.elasticsearch propriétés à un application-prod.properties et application-dev.properties et changez pour l'environnement souhaité. Ceci est décrit dans la section ElasticSearch du guide Spring Boot.

spring.data.elasticsearch.cluster-nodes=10.10.1.10:9300

La valeur dans l'un ou l'autre fichier sera bien sûr différente (ou placez la valeur par défaut dans le application.properties et simplement remplacer par un application-dev.properties.

Spring Boot sera basé sur le spring.profiles.activecharger les propriétés souhaitées fichier.

Il n'est pas nécessaire de vous pirater.

26
M. Deinum

Je suis d'accord avec Deinum, si vous utilisez Spring Boot, il obtiendra les propriétés du profil actif.

J'ai différents profils dans mon projet et voici ma configuration elasticsearch:

@Configuration
public class ElasticSearchConfiguration {
    @Value("${spring.data.elasticsearch.cluster-name}")
    private String clusterName;
    @Value("${spring.data.elasticsearch.cluster-nodes}")
    private String clusterNodes;
    @Bean
    public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException {
            String server = clusterNodes.split(":")[0];
            Integer port = Integer.parseInt(clusterNodes.split(":")[1]);
            Settings settings = Settings.settingsBuilder()
                .put("cluster.name", clusterName).build();
            client = TransportClient.builder().settings(settings).build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(server), port));
            return new ElasticsearchTemplate(client);

    }
3
ignacio.suay