flink中处理数据的时候,需要去ES里面获取一下数据,但是使用下面的代码报错client.performRequest(request)会报错,错误信息是thread waiting for the response was interrupted
/**
* 获取维保计划列表
*/
public static ArrayList<Maintenance> getMaintenance() throws Exception {
// 创建RestClientBuilder
RestClientBuilder builder = RestClient.builder(new HttpHost(PropertyUtils.elasticsearchHost, Integer.valueOf(PropertyUtils.elasticsearchPort), "http"));
// 获取RestClient实例
RestClient client = builder.build();
//创建一个搜索请求
Request request = new Request("GET", PropertyUtils.elasticsearchName);
request.addParameter("pretty", "true");
// 执行搜索请求
// 执行请求
Response response = client.performRequest(request);
ArrayList<Maintenance> maintenances = jointMaintenance(response);
// 关闭RestClient实例
client.close();
return maintenances;
}
/**
* 加载维保计划
*/
public static void loadMaintenance() throws Exception {
ArrayList<Maintenance> list = ElasticsearchUtils.getMaintenance();
System.out.println("开始加载维保计划!!!");
log.info("开始加载维保计划!!!");
for (Maintenance maintenance : list) {
loadMaintenance(maintenance);
}
System.out.println("维保计划加载完成!!!");
log.info("维保计划加载完成!!!");
}
但是不使用flink,直接main方法的时候就没有这个错误。目前的解决方式是创建一个线程去处理这个
public static void main(String[] args) {
try {
ArrayList<Maintenance> maintenance = getMaintenance();
System.out.println(maintenance);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
// 加载物模型-加载物模型与设备关系---项目启动就加载
try {
LoadModelFlink.loadModel();
RuleEngineUtils.loadRuleEngine();
new Thread(new Runnable() {
@Override
public void run() {
try {
MaintenanceUtils.loadMaintenance();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
MaintenanceTask.maintenanceTask();
} catch (Exception e) {
e.printStackTrace();
}
}
有什么其他的解决办法吗