@RestController
public class BoomFilerInitService implements ApplicationRunner {
private final static Logger logger = LoggerFactory.getLogger(BoomFilerInitService.class);
@Autowired
private YlbTradeFeignService ylbTradeFeignService;
static BloomFilter<String> dealIdBloomFilter;
public static BloomFilter<String> getDealIdBloomFilter() {
return dealIdBloomFilter;
}
public static BloomFilter<String> getInstance() {
if (dealIdBloomFilter == null) {
dealIdBloomFilter = BoomFilerInitService.getDealIdBloomFilter();
}
return dealIdBloomFilter;
}
public static void setDealIdBloomFilter(BloomFilter<String> dealIdBloomFilter) {
BoomFilerInitService.dealIdBloomFilter = dealIdBloomFilter;
}
ResponseMsg<List<YmAliUserApiEntity>> msg;
List<YmAliUserApiEntity> entityList;
String retCode = "";
@Async
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
int count=0;
while (!"0".equals(retCode)) {
msg = ylbTradeFeignService.findAll();//查询所有数据
retCode = msg.getRetCode();
entityList = msg.getData();
logger.debug("正在初始化布隆过滤器........");
Thread.sleep(6000);
count++;
if (count>10){
break;
}
}
dealIdBloomFilter = BloomFilter.create(new Funnel<String>() {
private static final long serialVersionUID = 1L;
@Override
public void funnel(String arg0, PrimitiveSink arg1) {
arg1.putString(arg0, Charsets.UTF_8);
}
}, entityList.size() + 10000 * 2, 0.00001d);
if (entityList != null) {
for (YmAliUserApiEntity entity : entityList) {
dealIdBloomFilter.put(entity.getImeicode());//把某个字段put到过滤器
}
logger.debug("布隆过滤器初始化完成!");
}
}
}