pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
@@ -9,8 +9,6 @@ import com.dy.rtuMw.server.tasks.FromRtuComResultConstantTask; import com.dy.rtuMw.server.tasks.FromRtuDataConstantTask; import com.dy.common.mw.UnitInterface; import com.dy.common.mw.channel.rmi.RmiConfigVo; import com.dy.common.mw.channel.rmi.RmiUnit; import com.dy.common.mw.channel.tcp.TcpConfigVo; import com.dy.common.mw.channel.tcp.TcpUnit; import com.dy.common.mw.core.CoreUnit; @@ -53,21 +51,29 @@ new Server().startServer(); } */ public void startServer(){ /** try { URL url = Server.class.getResource("/config/this.licence"); if(!new Lnp(null).parese(url.getPath())){ System.out.println("licence error!") ; return ; } } catch (Exception e) { System.out.println("licence error!") ; return ; } */ if(this.doStartServer()){ ServerShutDownHook.OnShutDown(); } } /** * 启动服务 */ public void startServer(){ // try { // URL url = Server.class.getResource("/config/this.licence"); // if(!new Lnp(null).parese(url.getPath())){ // System.out.println("licence error!") ; // return ; // } // } catch (Exception e) { // System.out.println("licence error!") ; // return ; // } //Server sv = new Server(); private boolean doStartServer(){ boolean running = false ; long start = System.currentTimeMillis() ; try { //ConfigProperties.init(this.getClass().getResourceAsStream("/config/config.properties"), false); @@ -120,11 +126,13 @@ System.out.println("@@@@@@@@@@@@@@@@@@@@@@# &@@@@@@@@ Runing in standalone mode" ) ; System.out.println("@@@@@@@@@@@@@@@@@@@@@& &@@@@@@@@ Startup in " + (System.currentTimeMillis() - start) + " MS" ) ; System.out.println("@@@@@@@@@@@@@@@@@@@# &@@@@@@@@ " + company) ; System.out.println("@@@@@@@@@@@@@@@@#O &@@@@@@@@") ; System.out.println("@@@@@@@@@@@@@@@@#O &@@@@@@@@") ; running = true ; }catch(Exception e){ e.printStackTrace(); running = false ; } return running ; } private void startUnits(){ pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/ServerShutDownHook.java
New file @@ -0,0 +1,36 @@ package com.dy.rtuMw; import com.dy.common.mw.protocol.Command; import com.dy.common.mw.protocol.CommandType; import com.dy.rtuMw.server.local.CommandInnerDeaLer; import com.dy.rtuMw.server.local.localProtocol.CodeLocal; import lombok.extern.slf4j.Slf4j; /** * @Author: liurunyu * @Date: 2024/8/6 9:51 * @Description 程序(控制台)关闭处理钩子类 */ @Slf4j public class ServerShutDownHook { public static void OnShutDown(){ Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run(){ try{ // 确保这段代码尽可能快速执行,避免影响JVM的关闭 log.info("程序(控制台)关闭钩子类执行"); Command com = new Command() ; com.id = Command.defaultId ; com.code = CodeLocal.stopTcpSv ; com.type = CommandType.innerCommand ; new CommandInnerDeaLer().deal(com) ; //Thread.sleep(100L);//实测不执行 log.info("关闭程序前,关闭了TCP服务"); }catch (Exception e){ log.error("程序(控制台)关闭钩子发生异常", e); } } }); } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application.yml
@@ -1,3 +1,9 @@ logging: charset: console: UTF-8 config: classpath: log4j2.yml spring: profiles: include: global, database pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/log4j2.yml
@@ -19,7 +19,7 @@ name: CONSOLE target: SYSTEM_OUT ThresholdFilter: level: debug #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 level: DEBUG #输出日志级别(DEBUG,INFO,WARN,ERROR,FATAL),输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 onMatch: ACCEPT #onMatch=ACCEPT 大于等于 "level" 配置的等级地日志输出 onMismatch: DENY #onMismatch=DENY 小于 "level" 配置的等级地日志不输出 #日志内容样式 @@ -44,7 +44,7 @@ fileName: ${log.path}/${project.name}.log filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" ThresholdFilter: level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 level: error #输出日志级别(DEBUG,INFO,WARN,ERROR,FATAL),输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 onMatch: ACCEPT #onMatch=ACCEPT 大于等于 "level" 配置的等级地日志输出 onMismatch: DENY #onMismatch=DENY 小于 "level" 配置的等级地日志不输出 #日志内容样式 @@ -58,7 +58,7 @@ Loggers: Root: level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off level: INFO #日志输出级别(DEBUG,INFO,WARN,ERROR,FATAL),共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off AppenderRef: #Root的子节点,用来指定该日志输出到哪个Appender. - ref: CONSOLE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出