parent
7fb827d1ca
commit
f458a9ee47
|
@ -24,4 +24,4 @@ mybatis.mapper-locations=classpath*:mappers/*.xml
|
||||||
mybatis.type-aliases-package=com.zjyr.beidouservice.pojo.entry
|
mybatis.type-aliases-package=com.zjyr.beidouservice.pojo.entry
|
||||||
#mybatis.configuration.default-enum-type-handler=com.dispose.common.CommonEnumHandler
|
#mybatis.configuration.default-enum-type-handler=com.dispose.common.CommonEnumHandler
|
||||||
#config log
|
#config log
|
||||||
#logging.config=
|
logging.config=file:config/logback.xml
|
|
@ -1 +1 @@
|
||||||
spring.profiles.active=local
|
spring.profiles.active=local,user
|
|
@ -0,0 +1,102 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<configuration scan="true">
|
||||||
|
|
||||||
|
<property name="LOG_PATH" value="./logs"/>
|
||||||
|
<property name="LOG_LEVEL" value="info"/>
|
||||||
|
<property name="SVR_LOG_LEVEL" value="info"/>
|
||||||
|
|
||||||
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder charset="UTF-8">
|
||||||
|
<pattern>[%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="BIZ"
|
||||||
|
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${LOG_PATH}/biz.log</file>
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<fileNamePattern>${LOG_PATH}/biz.log.%d{yyyyMMdd}
|
||||||
|
</fileNamePattern>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder charset="UTF-8">
|
||||||
|
<pattern>[%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
<appender name="SYSTEM-LOG-FILE"
|
||||||
|
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${LOG_PATH}/system.log</file>
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<fileNamePattern>${LOG_PATH}/system.log.%d{yyyyMMdd}
|
||||||
|
</fileNamePattern>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder charset="UTF-8">
|
||||||
|
<pattern>[%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="DATA"
|
||||||
|
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${LOG_PATH}/data.log</file>
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<fileNamePattern>${LOG_PATH}/data.log.%d{yyyyMMdd}
|
||||||
|
</fileNamePattern>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder charset="UTF-8">
|
||||||
|
<pattern>[%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<logger name="com.dispose.restful" level="${SVR_LOG_LEVEL}"
|
||||||
|
additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.dispose" level="${LOG_LEVEL}"
|
||||||
|
additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="org.mybatis" level="${LOG_LEVEL}" additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="org.apache.ibatis" level="${LOG_LEVEL}"
|
||||||
|
additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="org.mybatis.spring" level="${LOG_LEVEL}"
|
||||||
|
additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="org.springframework.jdbc" level="${LOG_LEVEL}"
|
||||||
|
additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.springframework.orm" level="${LOG_LEVEL}"
|
||||||
|
additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="com.mysql" level="${LOG_LEVEL}" additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="java.sql" level="${LOG_LEVEL}" additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="javax.sql" level="${LOG_LEVEL}" additivity="false">
|
||||||
|
<appender-ref ref="DATA"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<root level="${LOG_LEVEL}">
|
||||||
|
<appender-ref ref="SYSTEM-LOG-FILE"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
</root>
|
||||||
|
|
||||||
|
</configuration>
|
2
pom.xml
2
pom.xml
|
@ -70,7 +70,7 @@
|
||||||
<artifactId>mapper-spring-boot-starter</artifactId>
|
<artifactId>mapper-spring-boot-starter</artifactId>
|
||||||
<version>4.2.3</version>
|
<version>4.2.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.zjyr.beidouservice;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.adapter.impl.netty.impl.TcpServer;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
|
import org.springframework.boot.ApplicationArguments;
|
||||||
|
import org.springframework.boot.ApplicationRunner;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
@MapperScan(basePackages = {"com.zjyr.beidouservice.mapper"})
|
||||||
|
public class BaidouServiceApplication implements ApplicationRunner {
|
||||||
|
@Resource
|
||||||
|
private TcpServer tcpServer;
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(BaidouServiceApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(ApplicationArguments args) throws Exception {
|
||||||
|
tcpServer.start();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,15 +0,0 @@
|
||||||
package com.zjyr.beidouservice;
|
|
||||||
|
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
|
||||||
import org.springframework.boot.SpringApplication;
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
||||||
|
|
||||||
@SpringBootApplication
|
|
||||||
@MapperScan(basePackages = {"com.zjyr.beidouservice.mapper"})
|
|
||||||
public class TunnelServiceApplication {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
SpringApplication.run(TunnelServiceApplication.class, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.zjyr.beidouservice.adapter.impl.netty;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.adapter.impl.netty.decode.YuanRongProtocolDecode;
|
||||||
|
import io.netty.channel.ChannelInitializer;
|
||||||
|
import io.netty.channel.socket.SocketChannel;
|
||||||
|
import io.netty.handler.codec.string.StringDecoder;
|
||||||
|
import io.netty.handler.codec.string.StringEncoder;
|
||||||
|
import io.netty.handler.timeout.IdleStateHandler;
|
||||||
|
import io.netty.util.CharsetUtil;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class ChannelInit extends ChannelInitializer<SocketChannel> {
|
||||||
|
@Resource
|
||||||
|
private MessageHandler messageHandler;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initChannel(SocketChannel channel) {
|
||||||
|
channel.pipeline()
|
||||||
|
.addLast("idle", new IdleStateHandler(0, 0, 60, TimeUnit.SECONDS))
|
||||||
|
.addLast("encode", new YuanRongProtocolDecode())
|
||||||
|
.addLast("decode", new StringDecoder(CharsetUtil.UTF_8))
|
||||||
|
.addLast("message", messageHandler);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.zjyr.beidouservice.adapter.impl.netty;
|
||||||
|
|
||||||
|
import jakarta.annotation.PreDestroy;
|
||||||
|
|
||||||
|
public interface ISocketServer {
|
||||||
|
void start() throws Exception;
|
||||||
|
|
||||||
|
@PreDestroy
|
||||||
|
void destory() throws InterruptedException;
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package com.zjyr.beidouservice.adapter.impl.netty;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.misc.HelperUtils;
|
||||||
|
import com.zjyr.beidouservice.pojo.vo.YuanRongBinProtocol;
|
||||||
|
import io.netty.channel.ChannelHandler;
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.channel.SimpleChannelInboundHandler;
|
||||||
|
import io.netty.handler.timeout.IdleStateEvent;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@ChannelHandler.Sharable
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class MessageHandler extends SimpleChannelInboundHandler<YuanRongBinProtocol> {
|
||||||
|
@Override
|
||||||
|
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
|
||||||
|
log.info("{}:: Trigger Heart Signle", ctx.channel().id());
|
||||||
|
|
||||||
|
if (evt instanceof IdleStateEvent) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
super.userEventTriggered(ctx, evt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelRead0(ChannelHandlerContext ctx, YuanRongBinProtocol message) throws Exception {
|
||||||
|
log.info("{}:: Receive Message: {}", ctx.channel().id(), HelperUtils.bytesToHexString(message.getStart()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelActive(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
log.info("{}:: Connected", ctx.channel().id());
|
||||||
|
super.channelActive(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
log.info("{}:: Disonnected", ctx.channel().id());
|
||||||
|
super.channelActive(ctx);
|
||||||
|
ctx.close();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.zjyr.beidouservice.adapter.impl.netty.decode;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.pojo.vo.YuanRongBinProtocol;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.handler.codec.ByteToMessageDecoder;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class YuanRongProtocolDecode extends ByteToMessageDecoder {
|
||||||
|
@Override
|
||||||
|
protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) throws Exception {
|
||||||
|
if (buffer.readableBytes() > 0) {
|
||||||
|
byte[] val = new byte[buffer.readableBytes()];
|
||||||
|
buffer.readBytes(val, 0, buffer.readableBytes());
|
||||||
|
YuanRongBinProtocol v = new YuanRongBinProtocol();
|
||||||
|
v.setStart(val);
|
||||||
|
out.add(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
package com.zjyr.beidouservice.adapter.impl.netty.impl;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.adapter.impl.netty.ChannelInit;
|
||||||
|
import com.zjyr.beidouservice.adapter.impl.netty.ISocketServer;
|
||||||
|
import com.zjyr.beidouservice.config.NettySocketConfigure;
|
||||||
|
import io.netty.bootstrap.ServerBootstrap;
|
||||||
|
import io.netty.channel.ChannelOption;
|
||||||
|
import io.netty.channel.EventLoopGroup;
|
||||||
|
import io.netty.channel.nio.NioEventLoopGroup;
|
||||||
|
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||||
|
import jakarta.annotation.PreDestroy;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class TcpServer implements ISocketServer {
|
||||||
|
@Resource
|
||||||
|
private final ChannelInit channelInit;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private final NettySocketConfigure nettySocketConfigure;
|
||||||
|
private EventLoopGroup boosGroup;
|
||||||
|
private EventLoopGroup workerGroup;
|
||||||
|
|
||||||
|
private void tcpServer(int port) {
|
||||||
|
try {
|
||||||
|
new ServerBootstrap()
|
||||||
|
.group(boosGroup, workerGroup)
|
||||||
|
.channel(NioServerSocketChannel.class)
|
||||||
|
.localAddress(new InetSocketAddress(port))
|
||||||
|
.childHandler(channelInit)
|
||||||
|
.option(ChannelOption.SO_BACKLOG, 128)
|
||||||
|
.childOption(ChannelOption.TCP_NODELAY, false)
|
||||||
|
.childOption(ChannelOption.SO_KEEPALIVE, true)
|
||||||
|
.bind().sync();
|
||||||
|
log.info("Netty TCP Server Beginning Listen: {}", port);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
boosGroup.shutdownGracefully();
|
||||||
|
workerGroup.shutdownGracefully();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
log.info("Start Netty TCP Server");
|
||||||
|
boosGroup = new NioEventLoopGroup();
|
||||||
|
workerGroup = new NioEventLoopGroup();
|
||||||
|
this.tcpServer(nettySocketConfigure.getServerPort());
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreDestroy
|
||||||
|
@Override
|
||||||
|
public void destory() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.zjyr.beidouservice.config;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ConfigurationProperties(prefix = "socket")
|
||||||
|
@Configuration
|
||||||
|
@Slf4j
|
||||||
|
public class NettySocketConfigure {
|
||||||
|
private String serverHost;
|
||||||
|
private Integer serverPort;
|
||||||
|
private String serverMode;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
private void initGlobalValue() {
|
||||||
|
log.debug("{}", serverHost);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.zjyr.beidouservice.misc;
|
||||||
|
|
||||||
|
public class HelperUtils {
|
||||||
|
public static String bytesToHexString(byte[] bArray) {
|
||||||
|
StringBuilder sb = new StringBuilder(bArray.length);
|
||||||
|
String sTemp;
|
||||||
|
for (byte b : bArray) {
|
||||||
|
sTemp = Integer.toHexString(0xFF & b);
|
||||||
|
if (sTemp.length() < 2)
|
||||||
|
sb.append(0);
|
||||||
|
sb.append(sTemp.toUpperCase());
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.zjyr.beidouservice.pojo.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class YuanRongBinProtocol {
|
||||||
|
private byte[] start;
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
class TunnelServiceApplicationTests {
|
class BaidouServiceApplicationTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void contextLoads() {
|
void contextLoads() {
|
Loading…
Reference in New Issue