public void batch()
{
//1 检查是是否存在索引记录
Map<String, ClusterIndexHealth> map = client.admin().cluster().health(.......);
boolean exists = map.containsKey(indexName);
//2 不存在 就建立索引
if( !exists )
{
client.admin().indices().create(new CreateIndexRequest(indexName)).actionGet();
}
//3 设置mapping
PutMappingRequest ...
//4.设置记录值
for() {
BulkRequestBuilder.add( ...)
}
//5. 提交
batchRequest.execute().actionGet();
}
问题:
在多线程测试过程中,发现当新建立一个indexname时,会出现线程同时执行到2步时收到exists=false ,而同时去建立indexName,这样会造成一个线程创建成功,而其它线程失败。
以前在1.4 版本上是不用这么先创建indexname的,当然我可以在第二步加上try catch,强迫程序往下走,但是代码逻辑性不够好,请问有没其它办法避免这个问题,或是实现上述有其它的方式?
谢谢!
{
//1 检查是是否存在索引记录
Map<String, ClusterIndexHealth> map = client.admin().cluster().health(.......);
boolean exists = map.containsKey(indexName);
//2 不存在 就建立索引
if( !exists )
{
client.admin().indices().create(new CreateIndexRequest(indexName)).actionGet();
}
//3 设置mapping
PutMappingRequest ...
//4.设置记录值
for() {
BulkRequestBuilder.add( ...)
}
//5. 提交
batchRequest.execute().actionGet();
}
问题:
在多线程测试过程中,发现当新建立一个indexname时,会出现线程同时执行到2步时收到exists=false ,而同时去建立indexName,这样会造成一个线程创建成功,而其它线程失败。
以前在1.4 版本上是不用这么先创建indexname的,当然我可以在第二步加上try catch,强迫程序往下走,但是代码逻辑性不够好,请问有没其它办法避免这个问题,或是实现上述有其它的方式?
谢谢!
0 个回复