diff --git a/user-service/pom.xml b/user-service/pom.xml index 2becfa0..b676a6d 100644 --- a/user-service/pom.xml +++ b/user-service/pom.xml @@ -135,6 +135,13 @@ commons-pool2 + + + com.github.ben-manes.caffeine + caffeine + 2.8.8 + + diff --git a/user-service/src/main/java/com/mh/user/config/CaffeineCacheConfig.java b/user-service/src/main/java/com/mh/user/config/CaffeineCacheConfig.java new file mode 100644 index 0000000..e8d1a60 --- /dev/null +++ b/user-service/src/main/java/com/mh/user/config/CaffeineCacheConfig.java @@ -0,0 +1,59 @@ +package com.mh.user.config; + +import com.github.benmanes.caffeine.cache.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +/** + * @author LJF + * @title : + * @description 使用caffeine缓存技术 + * @updateTime 2020-12-15 + * @throws : + */ +@Configuration +public class CaffeineCacheConfig { + + // 软引用: 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。 + // 弱引用: 弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象, + // 不管当前内存空间足够与否,都会回收它的内存 + @Bean(name = "caffeineCache") + public Cache caffeineCache() { + return Caffeine.newBuilder() + // 软引用 + .softValues() + // 弱引用 +// .weakValues() + // 设置最后一次写入或访问后经过固定时间过期 + .expireAfterWrite(8*60*60, TimeUnit.SECONDS) + // 初始的缓存空间大小 + .initialCapacity(100) + // 缓存的最大条数 + .maximumSize(1000) + .build(); + } + + //定义缓存,可直接使用 + @Bean + public LoadingCache expiryCache(){ + LoadingCache loadingCache = Caffeine.newBuilder() + .initialCapacity(100) + .maximumSize(1000) + //缓存写入/删除监控 + .writer(new CacheWriter() { + @Override + public void write(Object key, Object value) { //此方法是同步阻塞的 + System.out.println("--缓存写入--:key=" + key + ", value=" + value); + } + @Override + public void delete(Object key, Object value, RemovalCause cause) { System.out.println("--缓存删除--:key=" + key); } + }) + .expireAfterAccess(6, TimeUnit.HOURS) //过期时间 + .build((String key)->"刷新的数据"); //cacheload实现类,刷新时候调用 +// loadingCache.put("name","侯征"); + return loadingCache; + } + +} diff --git a/user-service/src/main/java/com/mh/user/entity/DeviceCodeParamEntity.java b/user-service/src/main/java/com/mh/user/entity/DeviceCodeParamEntity.java index 3eccc0a..48d340c 100644 --- a/user-service/src/main/java/com/mh/user/entity/DeviceCodeParamEntity.java +++ b/user-service/src/main/java/com/mh/user/entity/DeviceCodeParamEntity.java @@ -19,5 +19,8 @@ public class DeviceCodeParamEntity { private String dataValue; //传入值 private Date createTime; private String buildingId; + private String thread; + + private Integer isuse; } diff --git a/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java b/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java index 2c23bd1..3437208 100644 --- a/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java +++ b/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java @@ -5,9 +5,13 @@ import com.mh.user.entity.AddCronJobReq; import com.mh.user.manage.QuartzManager; import com.mh.user.serialport.SerialPortListener; import com.mh.user.serialport.SerialPortUtil; +import com.mh.user.service.DeviceCodeParamService; +import com.mh.user.utils.CacheUtil; +import com.mh.user.utils.GetReadOrder485; import com.mh.user.utils.TimedTask2; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @@ -31,10 +35,33 @@ public class CollectionLoopRunner implements ApplicationRunner { public static SerialPort serialPort = null; + @Resource + private DeviceCodeParamService deviceCodeParamService; + @Override public void run(ApplicationArguments args) throws Exception { // collectionMeterAndCloud();//采集 // Constant.WEB_FLAG=false; //恢复采集 + // 初始化指令设备参数 + initialDeviceCodeParams(); + } + + private void initialDeviceCodeParams() { + GetReadOrder485 getReadOrder485 = new GetReadOrder485(); + int r=deviceCodeParamService.queryCount(); //查询记录数 + if (r==0){ + getReadOrder485.createOrderParam(); //生成采集参数 + } + int r1 = deviceCodeParamService.queryCount2(); //查询记录数 + if (r1 == 0) { + getReadOrder485.createOrderParam2(); //生成采集参数 + } + int r2=deviceCodeParamService.queryCount3();//查询记录数 + if (r2==0){ + getReadOrder485.createOrderParam3(); //生成采集参数 + } + // 生成指令缓存 + //CacheUtil instance = CacheUtil.getInstance(); } public void test() throws Exception { diff --git a/user-service/src/main/java/com/mh/user/job/DealDataJob.java b/user-service/src/main/java/com/mh/user/job/DealDataJob.java index 5591f34..ee7f644 100644 --- a/user-service/src/main/java/com/mh/user/job/DealDataJob.java +++ b/user-service/src/main/java/com/mh/user/job/DealDataJob.java @@ -30,8 +30,6 @@ public class DealDataJob { @Autowired private DeviceCodeParamService deviceCodeParamService; - private GetReadOrder485 getReadOrder485; - private static int taskTimes = 1; public DealDataJob(DealDataService dealDataService) @@ -71,63 +69,64 @@ public class DealDataJob { public void collect() { try { log.info("------定时采集开始>>>>Constant.FLAG=="+Constant.FLAG+"------"); - SerialPortSendReceive sendReceive=new SerialPortSendReceive(); - if(Constant.FLAG==false){ - if(Constant.WEB_FLAG==false){ + if(!Constant.FLAG){ + if(!Constant.WEB_FLAG){ log.info("------taskTimes=="+taskTimes+"------"); - if (taskTimes<=4) { - Constant.FLAG=true; - log.info("------Constant.WEB_FLAG=="+Constant.WEB_FLAG+"------"); - if (taskTimes == 2) {//2 - int r = deviceCodeParamService.queryCount2(); //查询记录数 - if (r == 0) { - getReadOrder485.createOrderParam2(); //生成采集参数 - } - for(int i=1;i<11;i++){ - SerialPortThread myThread = new SerialPortThread(); - Thread thread = new Thread(myThread); - myThread.setName("2", String.valueOf(i)); - thread.start(); - } - log.info("------采集水、电、运行状态!"+taskTimes+"------"); - }else if (taskTimes == 3){//3 - for(int i=1;i<11;i++){ - SerialPortThread myThread = new SerialPortThread(); - Thread thread = new Thread(myThread); - myThread.setName("1", String.valueOf(i)); - thread.start(); - } - log.info("------采集水位、水温!"+taskTimes+"------"); - }else if (taskTimes == 4) {//4 - for(int i=1;i<11;i++){ - SerialPortThread myThread = new SerialPortThread(); - Thread thread = new Thread(myThread); - myThread.setName("3", String.valueOf(i)); - thread.start(); - } - log.info("------采集设定温度、设定水位、故障状态!"+taskTimes+"------"); - }else { - for(int i=1;i<11;i++){ - SerialPortThread myThread = new SerialPortThread(); - Thread thread = new Thread(myThread); - myThread.setName("1", String.valueOf(i)); - thread.start(); - } - log.info("------采集水位、水温!"+taskTimes+"------"); + Constant.FLAG=true; + log.info("------Constant.WEB_FLAG=="+Constant.WEB_FLAG+"------"); + for (int i = 1; i <= 4; i++) { + String threadName = String.valueOf(i); + if (i == 1 || i == 3) { + threadName = "1"; } - if(taskTimes<4){ - taskTimes++; - }else{ - taskTimes=1; + for(int j=1;i<11;i++){ + SerialPortThread myThread = new SerialPortThread(); + Thread thread = new Thread(myThread); + myThread.setName(threadName, String.valueOf(j)); + thread.start(); } } -// Constant.FLAG=true; -// for(int i=1;i<4;i++){ -// SerialPortThread myThread = new SerialPortThread(); -// Thread thread = new Thread(myThread); -// myThread.setName("1",String.valueOf(i)); -// thread.start(); -// log.info("-------------采集水位、水温!线程"+String.valueOf(i)+"-------------"); +// if (taskTimes<=4) { +// Constant.FLAG=true; +// log.info("------Constant.WEB_FLAG=="+Constant.WEB_FLAG+"------"); +// if (taskTimes == 2) {//2 +// for(int i=1;i<11;i++){ +// SerialPortThread myThread = new SerialPortThread(); +// Thread thread = new Thread(myThread); +// myThread.setName("2", String.valueOf(i)); +// thread.start(); +// } +// log.info("------采集水、电、运行状态!"+taskTimes+"------"); +// }else if (taskTimes == 3){//3 +// for(int i=1;i<11;i++){ +// SerialPortThread myThread = new SerialPortThread(); +// Thread thread = new Thread(myThread); +// myThread.setName("1", String.valueOf(i)); +// thread.start(); +// } +// log.info("------采集水位、水温!"+taskTimes+"------"); +// }else if (taskTimes == 4) {//4 +// for(int i=1;i<11;i++){ +// SerialPortThread myThread = new SerialPortThread(); +// Thread thread = new Thread(myThread); +// myThread.setName("3", String.valueOf(i)); +// thread.start(); +// } +// log.info("------采集设定温度、设定水位、故障状态!"+taskTimes+"------"); +// }else { +// for(int i=1;i<11;i++){ +// SerialPortThread myThread = new SerialPortThread(); +// Thread thread = new Thread(myThread); +// myThread.setName("1", String.valueOf(i)); +// thread.start(); +// } +// log.info("------采集水位、水温!"+taskTimes+"------"); +// } +// if(taskTimes<4){ +// taskTimes++; +// }else{ +// taskTimes=1; +// } // } } } diff --git a/user-service/src/main/java/com/mh/user/mapper/DeviceCodeParamMapper.java b/user-service/src/main/java/com/mh/user/mapper/DeviceCodeParamMapper.java index 0af0666..d50b725 100644 --- a/user-service/src/main/java/com/mh/user/mapper/DeviceCodeParamMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/DeviceCodeParamMapper.java @@ -38,21 +38,39 @@ public interface DeviceCodeParamMapper { //查询所有指令参数 @ResultMap("rs") - @Select("select * from device_code_param where thread=#{thread} order by data_com,device_type") + @Select("select * from device_code_param " + +// "" + +// "" + +// " and thread=#{thread} " + +// "" + +// "" + + "order by data_com,device_type") //@Select("select * from device_code_param order by data_com,device_type ") // @Select("select * from device_code_param order by device_type ") List queryCodeParam3(@Param("thread") String thread); //查询所有指令参数 @ResultMap("rs") - @Select("select * from device_code_param2 where thread=#{thread} order by data_com,device_type") + @Select("select * from device_code_param2 " + +// "" + +// "" + +// " and thread=#{thread} " + +// "" + +// "" + + "order by data_com,device_type") //@Select("select * from device_code_param2 order by data_com,device_type ") // @Select("select * from device_code_param2 order by device_type ") List queryCodeParam4(@Param("thread") String thread); //查询所有指令参数 @ResultMap("rs") - @Select("select * from device_code_param3 where thread=#{thread} order by data_com,device_type") + @Select("select * from device_code_param3 " + +// "" + +// "" + +// " and thread=#{thread} " + +// "" + +// "" + + " order by data_com,device_type") //@Select("select * from device_code_param3 order by data_com,device_type") // @Select("select * from device_code_param3 order by device_type ") List queryCodeParam5(@Param("thread") String thread); diff --git a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java index 80ce0c0..6472c5c 100644 --- a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java +++ b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java @@ -178,32 +178,7 @@ public class SerialPortSendReceive { } } try{ - if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length()==40 || dataStr.length()==50) && deviceType.equals("电表")) { - analysisReceiveOrder485.analysisMeterOrder485(dataStr,registerAddr,brand,buildingId); - nowDataService.proWaterLevel(dateStr,buildingId); //保存时间点楼栋水位 - }else if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) { - analysisReceiveOrder485.analysisWtMeterOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("压变")) { - analysisReceiveOrder485.analysisPressureOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("热泵")) { - analysisReceiveOrder485.analysisPumpOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("温控")) { - analysisReceiveOrder485.analysisTempOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("时控")) { - analysisReceiveOrder485.analysisTimeSetOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("水位开关") && (registerAddr.equals("0018") || registerAddr.equals("0017"))){ - analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); - }else if (dataStr.length() == 30 && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统 - analysisReceiveOrder485.analysisStateOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("水位开关") && registerAddr.equals("0010")){ - analysisReceiveOrder485.analysisPumpStateOrder(dataStr,registerAddr,brand,buildingId); //创新,热泵状态与水位共用一个8路设备 -// analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); //华厦 - nowDataService.proWaterLevel(dateStr,buildingId); //保存时间点楼栋水位 - }else if (deviceType.equals("温度变送器")){ - analysisReceiveOrder485.analysisMulTempOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("热泵状态")){ - analysisReceiveOrder485.analysisPumpStateOrder(dataStr,registerAddr,brand,buildingId); - } + SerialPortSendReceive2.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService); }catch (Exception e){ // e.printStackTrace(); Constant.WEB_FLAG=false;//可以采集的状态 diff --git a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java index 55616e4..704a09b 100644 --- a/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java +++ b/user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java @@ -1,23 +1,24 @@ package com.mh.user.serialport; +import com.mh.common.utils.StringUtils; import com.mh.user.constants.Constant; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.service.BuildingService; import com.mh.user.service.DeviceCodeParamService; import com.mh.user.service.DeviceInstallService; import com.mh.user.service.NowDataService; -import com.mh.user.utils.AnalysisReceiveOrder485; -import com.mh.user.utils.ExchangeStringUtil; -import com.mh.user.utils.SendOrderUtils; -import com.mh.user.utils.SpringBeanUtil; +import com.mh.user.utils.*; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; import purejavacomm.SerialPort; + import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; +import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * @author nxr @@ -30,10 +31,10 @@ import java.util.List; public class SerialPortSendReceive2 { private String receiveStr = null; -// public SerialPort serialPort = null; + // public SerialPort serialPort = null; private int size = 0; - private int baudrate=9600; - private String parity=null; + private int baudrate = 9600; + private String parity = null; List deviceManageEntityList; // 调用service ApplicationContext context = SpringBeanUtil.getApplicationContext(); @@ -43,199 +44,222 @@ public class SerialPortSendReceive2 { BuildingService buildingService = context.getBean(BuildingService.class); AnalysisReceiveOrder485 analysisReceiveOrder485 = new AnalysisReceiveOrder485(); - public void serialPortSend(String sort,String thread) { + public void serialPortSend(String sort, String thread) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); String dateStr = df.format(date); SerialPort serialPort = null; - + CacheUtil cacheUtil = CacheUtil.getInstance(); // if (port.contains(comName)){ - try{ - //生成对应的采集指令 - if (sort.equals("1")){ //水温、水位 - deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread); - }else if (sort.equals("2")){ //采集水、电、运行状态! - deviceManageEntityList = deviceCodeParamService.queryCodeParam4(thread); - }else if (sort.equals("3")){ //采集设定温度、设定水位、故障状态! - deviceManageEntityList = deviceCodeParamService.queryCodeParam5(thread); - }else{ - deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread); + try { + //生成对应的采集指令 +// switch (sort) { +// case "2": //采集水、电、运行状态! +// deviceManageEntityList = deviceCodeParamService.queryCodeParam4(thread); +// break; +// case "3": //采集设定温度、设定水位、故障状态! +// deviceManageEntityList = deviceCodeParamService.queryCodeParam5(thread); +// break; +// default: +// deviceManageEntityList = deviceCodeParamService.queryCodeParam3(thread); +// break; +// } + List deviceParamsByType = cacheUtil.getDeviceParamsByType(sort); + deviceManageEntityList = deviceParamsByType + .parallelStream() + .filter(value -> value.getThread().equals(thread)) + .sorted(Comparator.comparing(DeviceCodeParamEntity::getDataCom)) + .collect(Collectors.toList()); + size = deviceManageEntityList.size(); + for (int i = 0; i < size; i++) { + //判断网页端是否有操作设备的 + if (Constant.WEB_FLAG) { + Constant.FLAG = false; + SerialTool.closePort(serialPort); + log.info("有指令下发退出定时采集"); + break; } - size = deviceManageEntityList.size(); - for (int i=0;i8){ - String str1=receiveData.substring(0,8); - String str2=receiveData.substring(8); - dataStr=str1.replace("FE", "")+str2; - }else{ - dataStr = receiveData.replace("FE", ""); } - deviceInstallService.updateOnline(deviceAddr,deviceType,buildingId,"在线"); //设备在线 - log.info("----------------"+deviceType+"在线,设备号:"+deviceAddr+",所属楼栋:"+buildingName+"----------------"); - if (deviceType.equals("热泵")){ - String strState=nowDataService.selectState(buildingId,deviceAddr); - if (strState!=null && strState.equals("离线")){ //采集到数据 - nowDataService.updateRunState(buildingId,deviceAddr,"不运行"); //监控界面状态表热泵在线状态 - } - } - try{ - if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length()==40 || dataStr.length()==50) && deviceType.equals("电表")) { - analysisReceiveOrder485.analysisMeterOrder485(dataStr,registerAddr,brand,buildingId); - nowDataService.proWaterLevel(dateStr,buildingId); //保存时间点楼栋水位 - }else if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) { - analysisReceiveOrder485.analysisWtMeterOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("压变")) { - analysisReceiveOrder485.analysisPressureOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("热泵")) { - analysisReceiveOrder485.analysisPumpOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("温控")) { - analysisReceiveOrder485.analysisTempOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("时控")) { - analysisReceiveOrder485.analysisTimeSetOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("水位开关") && (registerAddr.equals("0018") || registerAddr.equals("0017"))){ - analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); - }else if (dataStr.length() == 30 && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统 - analysisReceiveOrder485.analysisStateOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("水位开关") && registerAddr.equals("0010")){ - analysisReceiveOrder485.analysisPumpStateOrder(dataStr,registerAddr,brand,buildingId); //创新,热泵状态与水位共用一个8路设备 -// analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); //华厦 - nowDataService.proWaterLevel(dateStr,buildingId); //保存时间点楼栋水位 - }else if (deviceType.equals("温度变送器")){ - analysisReceiveOrder485.analysisMulTempOrder485(dataStr,registerAddr,brand,buildingId); - }else if (deviceType.equals("热泵状态")){ - analysisReceiveOrder485.analysisPumpStateOrder(dataStr,registerAddr,brand,buildingId); - } - }catch (Exception e){ -// e.printStackTrace(); - Constant.WEB_FLAG=false;//可以采集的状态 - if(i==size-1){ - Constant.FLAG=false; - } - log.error(deviceManageEntityList.get(i).getDeviceType()+"保存数据库失败!"+i); - } - Thread.sleep(1000); - }else{ - Constant.WEB_FLAG=false;//可以采集的状态 - if(i==size-1){ - Constant.FLAG=false; + } else { + continue; + } + } catch (Exception e) { + Constant.WEB_FLAG = false;//可以采集的状态 + log.error("发送窗口数据异常==>", e); + } + + //从串口读取数据 + byte[] bytes = SerialTool.readFromPort(serialPort); + if (bytes == null) { + SerialTool.closePort(serialPort); + Thread.sleep(2000); + log.info("串口" + serialPort + "没有数据返回!" + i); + log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); + Constant.WEB_FLAG = false;//可以采集的状态 + if (i == size - 1) { + Constant.FLAG = false; + } + String time1 = deviceInstallService.selectLastDate(deviceType, deviceAddr, buildingId); + Date date1 = new Date(); + String time2 = df.format(date1); + if (time1 == null) { + time1 = df.format(date1); + } + int d = ExchangeStringUtil.compareCopyTime(time1, time2); + if (d == 1) { + deviceInstallService.updateNotOnline(deviceAddr, deviceType, buildingId, "离线"); //所有设备离线 + if (deviceType.equals("热泵")) { + nowDataService.updateRunState(buildingId, deviceAddr, "离线"); //监控界面状态表热泵在线状态 } - log.info("-------------串口:"+comName+"不存在!-------------"); } - if(i==size-1){ - Constant.FLAG=false; - log.info("-------------一轮采集完,采集标志Constant.Flag="+Constant.FLAG+"-------------"); - } + continue; } - }catch (Exception e){ - e.printStackTrace(); - Constant.WEB_FLAG=false;//可以采集的状态 - Constant.FLAG=false; - log.error("-------------串口采集异常!-------------"); + // 处理返回来的数据报文 + dealReceiveData(dateStr, serialPort, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, bytes); } -// }else { -// log.info("串口:"+comName+"不存在!"); -// } + Constant.FLAG = false; + log.info("-------------一轮采集完,采集标志Constant.Flag=false-------------"); + } catch (Exception e) { + e.printStackTrace(); + Constant.WEB_FLAG = false;//可以采集的状态 + Constant.FLAG = false; + log.error("-------------串口采集异常!-------------"); + } } + + /** + * 处理返回来的数据 + * @param dateStr + * @param serialPort + * @param i + * @param deviceAddr + * @param deviceType + * @param registerAddr + * @param brand + * @param buildingId + * @param buildingName + * @param bytes + * @throws InterruptedException + */ + private void dealReceiveData(String dateStr, + SerialPort serialPort, + int i, + String deviceAddr, + String deviceType, + String registerAddr, + String brand, + String buildingId, + String buildingName, byte[] bytes) throws InterruptedException { + receiveStr = ""; + receiveStr = printHexString(bytes); + //去掉空格和null + receiveStr = receiveStr.replace("null", ""); + receiveStr = receiveStr.replace(" ", ""); + log.info("串口" + serialPort + "接受第" + i + "数据:" + receiveStr + ",大小: " + receiveStr.length()); + try { + SerialTool.closePort(serialPort); + log.info("关闭" + serialPort); + } catch (Exception e) { + Constant.WEB_FLAG = false;//可以采集的状态 + if (i == size - 1) { + Constant.FLAG = false; + } + log.error("关闭" + serialPort + "失败!", e); + } + //返回值全部变成大写 + String receiveData = receiveStr.toUpperCase(); + //截取去掉FE + String dataStr; + if (receiveData.length() > 8) { + String str1 = receiveData.substring(0, 8); + String str2 = receiveData.substring(8); + dataStr = str1.replace("FE", "") + str2; + } else { + dataStr = receiveData.replace("FE", ""); + } + deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线 + log.info("----------------" + deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); + if (deviceType.equals("热泵")) { + String strState = nowDataService.selectState(buildingId, deviceAddr); + if (strState != null && strState.equals("离线")) { //采集到数据 + nowDataService.updateRunState(buildingId, deviceAddr, "不运行"); //监控界面状态表热泵在线状态 + } + } + try { + // 解析返回来的数据 + analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService); + } catch (Exception e) { + Constant.WEB_FLAG = false;//可以采集的状态 + log.error(deviceManageEntityList.get(i).getDeviceType() + "保存数据库失败!" + i,e); + } + Thread.sleep(1000); + } + + static void analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String dataStr, AnalysisReceiveOrder485 analysisReceiveOrder485, NowDataService nowDataService) { + if ((dataStr.length() == 36 || dataStr.length() == 44 || dataStr.length() == 40 || dataStr.length() == 50) && deviceType.equals("电表")) { + analysisReceiveOrder485.analysisMeterOrder485(dataStr, registerAddr, brand, buildingId); + nowDataService.proWaterLevel(dateStr, buildingId); //保存时间点楼栋水位 + } else if ((dataStr.length() == 18 || dataStr.length() == 70 || dataStr.length() == 44) && deviceType.equals("水表")) { + analysisReceiveOrder485.analysisWtMeterOrder485(dataStr, registerAddr, brand, buildingId); + } else if (deviceType.equals("压变")) { + analysisReceiveOrder485.analysisPressureOrder485(dataStr, registerAddr, brand, buildingId); + } else if (deviceType.equals("热泵")) { + analysisReceiveOrder485.analysisPumpOrder485(dataStr, registerAddr, brand, buildingId); + } else if (deviceType.equals("温控")) { + analysisReceiveOrder485.analysisTempOrder485(dataStr, registerAddr, brand, buildingId); + } else if (deviceType.equals("时控")) { + analysisReceiveOrder485.analysisTimeSetOrder485(dataStr, registerAddr, brand, buildingId); + } else if (deviceType.equals("水位开关") && (registerAddr.equals("0018") || registerAddr.equals("0017"))) { + analysisReceiveOrder485.analysisRelayOrder485(dataStr, registerAddr, brand, buildingId); + } else if (dataStr.length() == 30 && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统 + analysisReceiveOrder485.analysisStateOrder485(dataStr, registerAddr, brand, buildingId); + } else if (deviceType.equals("水位开关") && registerAddr.equals("0010")) { + analysisReceiveOrder485.analysisPumpStateOrder(dataStr, registerAddr, brand, buildingId); //创新,热泵状态与水位共用一个8路设备 +// analysisReceiveOrder485.analysisRelayOrder485(dataStr,registerAddr,brand,buildingId); //华厦 + nowDataService.proWaterLevel(dateStr, buildingId); //保存时间点楼栋水位 + } else if (deviceType.equals("温度变送器")) { + analysisReceiveOrder485.analysisMulTempOrder485(dataStr, registerAddr, brand, buildingId); + } else if (deviceType.equals("热泵状态")) { + analysisReceiveOrder485.analysisPumpStateOrder(dataStr, registerAddr, brand, buildingId); + } + } + /** * 字节数组转16进制字符串 + * * @param b 字节数组 * @return 16进制字符串 */ @@ -253,12 +277,13 @@ public class SerialPortSendReceive2 { /** * 十六进制字符串转byte[] + * * @param hex 十六进制字符串 * @return byte[] */ public static byte[] hexStr2Byte(String hex) { if (hex == null) { - return new byte[] {}; + return new byte[]{}; } // 奇数位补0 @@ -280,6 +305,7 @@ public class SerialPortSendReceive2 { /** * 16进制转换成为string类型字符串 + * * @param s 待转换字符串 */ public static String hexStringToString(String s) { diff --git a/user-service/src/main/java/com/mh/user/utils/CacheUtil.java b/user-service/src/main/java/com/mh/user/utils/CacheUtil.java new file mode 100644 index 0000000..d10f522 --- /dev/null +++ b/user-service/src/main/java/com/mh/user/utils/CacheUtil.java @@ -0,0 +1,79 @@ +package com.mh.user.utils; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.github.benmanes.caffeine.cache.Cache; +import com.mh.user.constants.Constant; +import com.mh.user.entity.ChillersEntity; +import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.service.DeviceCodeParamService; +import org.springframework.context.ApplicationContext; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Classname CacheUtil + * Todo: 缓存工具类 + * @Date 2021-11-21 10:03 + * @Created by LJF + */ +public class CacheUtil { + + // 调用service + ApplicationContext context = SpringBeanUtil.getApplicationContext(); + Cache caffeineCache = (Cache) context.getBean("caffeineCache"); + + DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class); + + private static class SingletonHolder{ + private static final CacheUtil instance=new CacheUtil(); + } + private CacheUtil(){ + createDeviceParams(); + } + public static CacheUtil getInstance(){ + return SingletonHolder.instance; + } + + /** + * 把采集ddc设置的报文存入到缓存中 + */ + private void createDeviceParams() { + // 缓存压变、温控 + if (caffeineCache.getIfPresent("1") == null) { + List deviceCodeParamEntities = deviceCodeParamService.queryCodeParam3(null); + caffeineCache.put("1", deviceCodeParamEntities); + } + // 缓存水、电表、状态检测 + if (caffeineCache.getIfPresent("2") == null) { + List deviceCodeParam2Entities = deviceCodeParamService.queryCodeParam4(null); + caffeineCache.put("2", deviceCodeParam2Entities); + } + // 水位开关 + if (caffeineCache.getIfPresent("3") == null) { + List deviceCodeParam3Entities = deviceCodeParamService.queryCodeParam5(null); + caffeineCache.put("3", deviceCodeParam3Entities); + } + } + + /** + * 通过发生类型获取发生的报文集合(返回List类型) + * @param type + * @return + */ + public List getDeviceParamsByType(String type) { + Object cacheObject = caffeineCache.getIfPresent(type); + // 如果为空,重新添加 + if (cacheObject == null) { + createDeviceParams(); + // 在重新获取数据 + cacheObject = caffeineCache.getIfPresent(type); + } + return JSONArray.parseArray(JSONObject.toJSONString(cacheObject), DeviceCodeParamEntity.class); + } + + +} diff --git a/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java b/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java index ceab370..cca0377 100644 --- a/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java +++ b/user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java @@ -1,22 +1,15 @@ package com.mh.user.utils; import com.mh.user.entity.*; -import com.mh.user.model.OrderParamModel; -import com.mh.user.serialport.SerialPortThread; import com.mh.user.service.DeviceCodeParamService; import com.mh.user.service.DeviceInstallService; import com.mh.user.service.impl.DeviceDisplayServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import static com.mh.user.utils.ExchangeStringUtil.doubleTrans1; - /** * @author ljf * @title : @@ -34,7 +27,7 @@ public class GetReadOrder485 { DeviceCodeParamService deviceCodeParamService=context.getBean(DeviceCodeParamService.class); // 电表 - public static String createMeterOrder(OrderParamModel orderParamModel){ + public static String createMeterOrder(DeviceCodeParamEntity orderParamModel){ String str=null; String deviceAddr=orderParamModel.getDeviceAddr(); if (deviceAddr!=null && deviceAddr.length()>0){ @@ -60,7 +53,7 @@ public class GetReadOrder485 { } // 水表 - public static String createWtMeterOrder(OrderParamModel orderParamModel){ + public static String createWtMeterOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String brand=orderParamModel.getBrand(); String str=null; @@ -92,7 +85,7 @@ public class GetReadOrder485 { } // 热泵,参数:功能码、品牌、数据、通讯表号、寄存器地址 - public static String createPumpOrder(OrderParamModel orderParamModel){ + public static String createPumpOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String brand=orderParamModel.getBrand(); String funCode=orderParamModel.getFunCode(); @@ -179,7 +172,7 @@ public class GetReadOrder485 { } // 水位开关(水位设定) - public static String createRelayOrder(OrderParamModel orderParamModel){ + public static String createRelayOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String brand=orderParamModel.getBrand(); String funCode=orderParamModel.getFunCode(); @@ -321,7 +314,7 @@ public class GetReadOrder485 { } // 热泵状态(8路开关) - public static String createPumpStateOrder(OrderParamModel orderParamModel){ + public static String createPumpStateOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String brand=orderParamModel.getBrand(); String funCode=orderParamModel.getFunCode(); @@ -376,7 +369,7 @@ public class GetReadOrder485 { } //状态检测 - public static String createStateOrder(OrderParamModel orderParamModel){ + public static String createStateOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String brand=orderParamModel.getBrand(); String str=null; @@ -405,7 +398,7 @@ public class GetReadOrder485 { } // 压变 - public static String createPressureOrder(OrderParamModel orderParamModel){ + public static String createPressureOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String brand=orderParamModel.getBrand(); String str=null; @@ -432,7 +425,7 @@ public class GetReadOrder485 { } // 温控 - public static String createTempOrder(OrderParamModel orderParamModel){ + public static String createTempOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String registerAddr=orderParamModel.getRegisterAddr(); String str=null; @@ -459,7 +452,7 @@ public class GetReadOrder485 { } // 温度变送器 - public static String createMulTempOrder(OrderParamModel orderParamModel){ + public static String createMulTempOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String registerAddr=orderParamModel.getRegisterAddr(); String str=null; @@ -480,7 +473,7 @@ public class GetReadOrder485 { } //时控设置,registerAddr 0009(L1)、000D(L2)、0011(L3) 读:010300090004、写:01100009000408+dataValue - public static String createTimeSetOrder(OrderParamModel orderParamModel){ + public static String createTimeSetOrder(DeviceCodeParamEntity orderParamModel){ String deviceAddr=orderParamModel.getDeviceAddr(); String brand=orderParamModel.getBrand(); String funCode=orderParamModel.getFunCode(); diff --git a/user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java b/user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java index c1b8084..ffe3971 100644 --- a/user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java +++ b/user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java @@ -101,39 +101,39 @@ public class SendOrderUtils { //向串口发指令数据 public static void sendSerialPort(DeviceCodeParamEntity deviceCodeParamEntity,SerialPort serialPort ) { //创建将要写出的数据 - OrderParamModel orderParamModel=new OrderParamModel(); - orderParamModel.setDeviceAddr(deviceCodeParamEntity.getDeviceAddr());//通讯地址 - orderParamModel.setDeviceType(deviceCodeParamEntity.getDeviceType());//设备类型 - orderParamModel.setBaudrate(deviceCodeParamEntity.getBaudrate());//波特率 - orderParamModel.setBrand(deviceCodeParamEntity.getBrand());//品牌 - orderParamModel.setFunCode(deviceCodeParamEntity.getFunCode());//功能码 - orderParamModel.setRegisterAddr(deviceCodeParamEntity.getRegisterAddr());//寄存器地址 - orderParamModel.setComName(deviceCodeParamEntity.getDataCom()); //串口 - orderParamModel.setDataValue(deviceCodeParamEntity.getDataValue());//传入数据 +// OrderParamModel orderParamModel=new OrderParamModel(); +// orderParamModel.setDeviceAddr(deviceCodeParamEntity.getDeviceAddr());//通讯地址 +// orderParamModel.setDeviceType(deviceCodeParamEntity.getDeviceType());//设备类型 +// orderParamModel.setBaudrate(deviceCodeParamEntity.getBaudrate());//波特率 +// orderParamModel.setBrand(deviceCodeParamEntity.getBrand());//品牌 +// orderParamModel.setFunCode(deviceCodeParamEntity.getFunCode());//功能码 +// orderParamModel.setRegisterAddr(deviceCodeParamEntity.getRegisterAddr());//寄存器地址 +// orderParamModel.setComName(deviceCodeParamEntity.getDataCom()); //串口 +// orderParamModel.setDataValue(deviceCodeParamEntity.getDataValue());//传入数据 String deviceType=deviceCodeParamEntity.getDeviceType(); String registerAddr=deviceCodeParamEntity.getRegisterAddr(); String sendStr=null; if (deviceType.equals("电表")){ - sendStr = GetReadOrder485.createMeterOrder(orderParamModel); + sendStr = GetReadOrder485.createMeterOrder(deviceCodeParamEntity); }else if (deviceType.equals("水表")){ - sendStr = GetReadOrder485.createWtMeterOrder(orderParamModel); + sendStr = GetReadOrder485.createWtMeterOrder(deviceCodeParamEntity); }else if (deviceType.equals("压变")){ - sendStr = GetReadOrder485.createPressureOrder(orderParamModel); + sendStr = GetReadOrder485.createPressureOrder(deviceCodeParamEntity); }else if (deviceType.equals("热泵")){ - sendStr = GetReadOrder485.createPumpOrder(orderParamModel); + sendStr = GetReadOrder485.createPumpOrder(deviceCodeParamEntity); }else if (deviceType.equals("温控")){ - sendStr = GetReadOrder485.createTempOrder(orderParamModel); + sendStr = GetReadOrder485.createTempOrder(deviceCodeParamEntity); }else if (deviceType.equals("时控")){ - sendStr = GetReadOrder485.createTimeSetOrder(orderParamModel); + sendStr = GetReadOrder485.createTimeSetOrder(deviceCodeParamEntity); }else if (deviceType.equals("水位开关")){ - sendStr = GetReadOrder485.createRelayOrder(orderParamModel); + sendStr = GetReadOrder485.createRelayOrder(deviceCodeParamEntity); }else if (deviceType.equals("状态检测")){ - sendStr = GetReadOrder485.createStateOrder(orderParamModel); + sendStr = GetReadOrder485.createStateOrder(deviceCodeParamEntity); }else if (deviceType.equals("温度变送器")){ - sendStr = GetReadOrder485.createMulTempOrder(orderParamModel); + sendStr = GetReadOrder485.createMulTempOrder(deviceCodeParamEntity); }else if (deviceType.equals("热泵状态")){ - sendStr = GetReadOrder485.createPumpStateOrder(orderParamModel); + sendStr = GetReadOrder485.createPumpStateOrder(deviceCodeParamEntity); } String str=sendStr; @@ -154,39 +154,39 @@ public class SendOrderUtils { //向串口发指令数据 public static String getSendStr(DeviceCodeParamEntity deviceCodeParamEntity) { //创建将要写出的数据 - OrderParamModel orderParamModel=new OrderParamModel(); - orderParamModel.setDeviceAddr(deviceCodeParamEntity.getDeviceAddr());//通讯地址 - orderParamModel.setDeviceType(deviceCodeParamEntity.getDeviceType());//设备类型 - orderParamModel.setBaudrate(deviceCodeParamEntity.getBaudrate());//波特率 - orderParamModel.setBrand(deviceCodeParamEntity.getBrand());//品牌 - orderParamModel.setFunCode(deviceCodeParamEntity.getFunCode());//功能码 - orderParamModel.setRegisterAddr(deviceCodeParamEntity.getRegisterAddr());//寄存器地址 - orderParamModel.setComName(deviceCodeParamEntity.getDataCom()); //串口 - orderParamModel.setDataValue(deviceCodeParamEntity.getDataValue());//传入数据 +// OrderParamModel orderParamModel=new OrderParamModel(); +// orderParamModel.setDeviceAddr(deviceCodeParamEntity.getDeviceAddr());//通讯地址 +// orderParamModel.setDeviceType(deviceCodeParamEntity.getDeviceType());//设备类型 +// orderParamModel.setBaudrate(deviceCodeParamEntity.getBaudrate());//波特率 +// orderParamModel.setBrand(deviceCodeParamEntity.getBrand());//品牌 +// orderParamModel.setFunCode(deviceCodeParamEntity.getFunCode());//功能码 +// orderParamModel.setRegisterAddr(deviceCodeParamEntity.getRegisterAddr());//寄存器地址 +// orderParamModel.setComName(deviceCodeParamEntity.getDataCom()); //串口 +// orderParamModel.setDataValue(deviceCodeParamEntity.getDataValue());//传入数据 String deviceType=deviceCodeParamEntity.getDeviceType(); String registerAddr=deviceCodeParamEntity.getRegisterAddr(); String sendStr=null; if (deviceType.equals("电表")){ - sendStr = GetReadOrder485.createMeterOrder(orderParamModel); + sendStr = GetReadOrder485.createMeterOrder(deviceCodeParamEntity); }else if (deviceType.equals("水表")){ - sendStr = GetReadOrder485.createWtMeterOrder(orderParamModel); + sendStr = GetReadOrder485.createWtMeterOrder(deviceCodeParamEntity); }else if (deviceType.equals("压变")){ - sendStr = GetReadOrder485.createPressureOrder(orderParamModel); + sendStr = GetReadOrder485.createPressureOrder(deviceCodeParamEntity); }else if (deviceType.equals("热泵")){ - sendStr = GetReadOrder485.createPumpOrder(orderParamModel); + sendStr = GetReadOrder485.createPumpOrder(deviceCodeParamEntity); }else if (deviceType.equals("温控")){ - sendStr = GetReadOrder485.createTempOrder(orderParamModel); + sendStr = GetReadOrder485.createTempOrder(deviceCodeParamEntity); }else if (deviceType.equals("时控")){ - sendStr = GetReadOrder485.createTimeSetOrder(orderParamModel); + sendStr = GetReadOrder485.createTimeSetOrder(deviceCodeParamEntity); }else if (deviceType.equals("水位开关")){ - sendStr = GetReadOrder485.createRelayOrder(orderParamModel); + sendStr = GetReadOrder485.createRelayOrder(deviceCodeParamEntity); }else if (deviceType.equals("状态检测")){ - sendStr = GetReadOrder485.createStateOrder(orderParamModel); + sendStr = GetReadOrder485.createStateOrder(deviceCodeParamEntity); }else if (deviceType.equals("温度变送器")){ - sendStr = GetReadOrder485.createMulTempOrder(orderParamModel); + sendStr = GetReadOrder485.createMulTempOrder(deviceCodeParamEntity); }else if (deviceType.equals("热泵状态")){ - sendStr = GetReadOrder485.createPumpStateOrder(orderParamModel); + sendStr = GetReadOrder485.createPumpStateOrder(deviceCodeParamEntity); } return sendStr; diff --git a/user-service/src/main/resources/application-dev.yml b/user-service/src/main/resources/application-dev.yml index d6d9b78..76591e9 100644 --- a/user-service/src/main/resources/application-dev.yml +++ b/user-service/src/main/resources/application-dev.yml @@ -8,41 +8,10 @@ spring: type: com.alibaba.druid.pool.DruidDataSource druid: #添加allowMultiQueries=true 在批量更新时才不会出错 - # url: jdbc:sqlserver://192.168.1.108:2012;DatabaseName=FSBG;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: sa - # password: mh@803 - ## url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=M_CHWS;allowMultiQueries=true - #阿里云服务器-广州理工 - # url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=CHWS;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: test - # password: minghan123456@ - #华厦云服务器 - # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: chws - # password: minghan123456@ - #创新服务器 - url: jdbc:sqlserver://119.29.33.133:2008;DatabaseName=chws_chx;allowMultiQueries=true + url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=chws_chx;allowMultiQueries=true driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - username: chws + username: sa password: mh@803 - #广商服务器 - # url: jdbc:sqlserver://119.29.33.133:2008;DatabaseName=chws_gsh;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: chws - # password: mh@803 - #本机 - # url: jdbc:sqlserver://127.0.0.1:9956;DatabaseName=CHWS;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: sa - # password: mh@803 - #家里电脑 - # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: sa - # password: mh@803 filters: stat,wall,config max-active: 100