2017-08-07 8 views
0

私はインデックスelasticsearchするオブジェクトにしようとしていますが、私は行き止まりの多くを見つけること以外に何の運を持っていないのです...elasticsearch&javaの - にInvocationTargetExceptionとNoNodeAvailableException

マイApplicationクラスは次のようになります。

import com.google.gson.Gson; 
import java.net.InetAddress; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 
import org.elasticsearch.action.index.IndexRequest; 
import org.elasticsearch.action.index.IndexResponse; 
import org.elasticsearch.client.Client; 
import org.elasticsearch.client.transport.TransportClient; 
import org.elasticsearch.common.settings.Settings; 
import org.elasticsearch.common.transport.InetSocketTransportAddress; 
import org.elasticsearch.common.xcontent.XContentBuilder; 

import org.elasticsearch.transport.client.PreBuiltTransportClient; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

import static org.elasticsearch.common.xcontent.XContentFactory.*; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.CommandLineRunner; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.elasticsearch.client.transport.TransportClient; 

@SpringBootApplication 
public class Application implements CommandLineRunner { 

    @Autowired 
    private FilRepo repository; 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public void run(String... args) throws Exception { 
     TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) 
       .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9200)); 

//  repository.deleteAll(); 
     List<Fil> listFiler = new ArrayList(); 
     // save a couple of customers 
//  repository.save(new Fil("Steffen-1", 5, new Date(), new Date())); 
//  repository.save(new Fil("Steffen-2", 10, new Date(), new Date())); 

     // fetch all customers 
     System.out.println("Filer funder med findAll():"); 
     System.out.println("-------------------------------"); 

     for (Fil f : repository.findAll()) { 
      listFiler.add(f); 
      IndexResponse response = client.prepareIndex("elasticsearch", "fil") 
        .setSource(jsonBuilder() 
          .startObject() 
          .field("fil", f.filNavn) 
          .field("size", f.filStr) 
          .field("created", f.created) 
          .field("modified", f.modified) 
          .endObject() 
        ) 
        .get(); 





        System.out.println("RESPONSE ER HER: " + response.toString()); 
     } 
     System.out.println(listFiler); 
     System.out.println(); 

     // fetch an individual customer 
     System.out.println("Customer found with findByFilNavn('Steffen-1'):"); 
     System.out.println("--------------------------------"); 
     System.out.println(repository.findByFilNavn("Steffen-1")); 

     client.close(); 

    } 
} 
私はlocalhostに行くことによって確認されている

マイelasticsearchが実行されている:それはこのようになります9200:

name "WpUHj5-" 
cluster_name "elasticsearch" 
cluster_uuid "nEgvRKklRveOr1ltZSPbeA" 
version 
number "5.5.0" 
build_hash "260387d" 
build_date "2017-06-30T23:16:05.735Z" 
build_snapshot false 
lucene_version "6.6.0" 
tagline "You Know, for Search" 

私はMVNスプリングブートから取得エラーログ:RU Nは次のとおりです。 enter image description here

enter image description here

と私のElasticsearchウィンドウのエラー:基本的には、 "既存の接続は外部ホストによって閉じられました" と言う

enter image description here

答えて

0

まず第一に、構成部分をビジネス・ロジックから分離するのが良いでしょう。

@Configuration 
public class ElasticsearchConfig { 

    private static final Logger LOG = getLogger(ElasticsearchConfig.class); 

    private Client client; 

    @SuppressWarnings("resource") 
    @Bean 
    public Client getClient() throws UnknownHostException { 

     Settings settings = Settings.builder() 
       .put("cluster.name", "elasticsearch") 
       .build(); 

     client = new PreBuiltTransportClient(settings) 
       .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

     LOG.info("--ElasticSearch--"); 
     Map<String, String> asMap = client.settings().getAsMap(); 
     asMap.forEach((k, v) -> LOG.info(k + " = " + v)); 
     LOG.info("--ElasticSearch--"); 

     return client;  
    } 

    @PreDestroy 
    public void closeClient() { 
     client.close(); 
    } 

} 

初期化した後:だからelasticsearchのコンフィギュレーションBeanは、次のする必要があります(ポート9200は、RESTのためである、correct port for communication via TransportClientはであることに注意してください、私はこれがここで多分唯一の主要な問題はないと思います) clientオブジェクトのテスト目的のために、あなたのロジック(ここではクライアントの設定が印刷されています)をチェックすることができますが、ロジックを別のサービスに移してclientを使用して作業するときれいになります:

@Autowired 
private Client client; 

舞nスプリングブートクラス:

@SpringBootApplication 
@EnableElasticsearchRepositories(basePackages = "pl.jma.es.demo.esrepository") 
public class EsDemoApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(EsDemoApplication.class, args); 
    } 

} 
関連する問題