Sulla base the second link hai fornito, ho creato questo abstract classe di test:
@RunWith(SpringJUnit4ClassRunner.class)
public abstract class AbstractElasticsearchTest {
private static final String HTTP_PORT = "9205";
private static final String HTTP_TRANSPORT_PORT = "9305";
private static final String ES_WORKING_DIR = "target/es";
private static Node node;
@BeforeClass
public static void startElasticsearch() throws Exception {
removeOldDataDir(ES_WORKING_DIR + "/" + clusterName);
Settings settings = Settings.builder()
.put("path.home", ES_WORKING_DIR)
.put("path.conf", ES_WORKING_DIR)
.put("path.data", ES_WORKING_DIR)
.put("path.work", ES_WORKING_DIR)
.put("path.logs", ES_WORKING_DIR)
.put("http.port", HTTP_PORT)
.put("transport.tcp.port", HTTP_TRANSPORT_PORT)
.put("index.number_of_shards", "1")
.put("index.number_of_replicas", "0")
.put("discovery.zen.ping.multicast.enabled", "false")
.build();
node = nodeBuilder().settings(settings).clusterName("monkeys.elasticsearch").client(false).node();
node.start();
}
@AfterClass
public static void stopElasticsearch() {
node.close();
}
private static void removeOldDataDir(String datadir) throws Exception {
File dataDir = new File(datadir);
if (dataDir.exists()) {
FileSystemUtils.deleteRecursively(dataDir);
}
}
}
Nel codice di produzione, ho configurato un client elasticsearch come segue. Il test di integrazione estende la classe astratta sopra definita e configura la proprietà elasticsearch.port
come 9305
e elasticsearch.host
come localhost
.
@Configuration
public class ElasticsearchConfiguration {
@Bean(destroyMethod = "close")
public Client elasticsearchClient(@Value("${elasticsearch.clusterName}") String clusterName,
@Value("${elasticsearch.host}") String elasticsearchClusterHost,
@Value("${elasticsearch.port}") Integer elasticsearchClusterPort) throws UnknownHostException {
Settings settings = Settings.settingsBuilder().put("cluster.name", clusterName).build();
InetSocketTransportAddress transportAddress = new InetSocketTransportAddress(InetAddress.getByName(elasticsearchClusterHost), elasticsearchClusterPort);
return TransportClient.builder().settings(settings).build().addTransportAddress(transportAddress);
}
}
Questo è tutto. Il test di integrazione eseguirà il codice di produzione configurato per connettersi al nodo avviato nello AbstractElasticsearchTest.startElasticsearch()
.
Nel caso in cui si desideri utilizzare l'API REST elasticsearch, utilizzare la porta 9205. Ad es. con Apache HttpComponents:
HttpClient httpClient = HttpClients.createDefault();
HttpPut httpPut = new HttpPut("http://localhost:9205/_template/" + templateName);
httpPut.setEntity(new FileEntity(new File("template.json")));
httpClient.execute(httpPut);
Comincerei a guardare le classi di test di Elasticsearch. Ad esempio, [questo] (https://github.com/elastic/elasticsearch/blob/v1.6.0/src/test/java/org/elasticsearch/test/ElasticsearchSingleNodeTest.java) in cui il tipo di archivio dell'indice può essere [ impostato su 'ram'] (https://github.com/elastic/elasticsearch/blob/v1.6.0/src/test/java/org/elasticsearch/test/ElasticsearchSingleNodeTest.java#L139). –