天台山水库获取水质信息

master
wany 2023-11-27 10:41:34 +08:00
commit c6de0847fd
15 changed files with 933 additions and 0 deletions

212
pom.xml Normal file
View File

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.whdc</groupId>
<artifactId>ttssk-service</artifactId>
<version>1.0</version>
<description>天台山水库</description>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<java.version>1.8</java.version>
<copy.jar.directory>target/release</copy.jar.directory>
</properties>
<!-- 使用阿里 maven 库 -->
<repositories>
<repository>
<id>ali-maven</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- mysql start-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- mysql end-->
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.30.0</version>
</dependency><!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId>
<version>1.30.0</version>
</dependency>
<!-- 提供Redis连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- Sa-Token 权限认证 end -->
<!-- knife4j swagger start-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- knife4j swagger end-->
<!-- devtools start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!-- devtools end -->
<!-- lombok start -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- lombok end -->
<!-- fastjson start -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</dependency>
<!-- fastjson end-->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.0</version>
</dependency>
<!-- druid start -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<!-- druid end -->
<!-- mybatisplus-plus start -->
<dependency>
<groupId>com.github.jeffreyning</groupId>
<artifactId>mybatisplus-plus</artifactId>
<version>1.7.0-RELEASE</version>
</dependency>
<!-- mybatisplus-plus end -->
</dependencies>
<build>
<plugins>
<!-- 1.生成的jar中不要包含pom.xml和pom.properties这两个文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<!-- 是否要把第三方jar加入到类构建路径 -->
<addClasspath>true</addClasspath>
<!-- 外部依赖jar包的最终位置 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- 项目启动类 -->
<mainClass>com.whdc.SpringApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!--2.拷贝依赖到jar外面的lib目录-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-lib</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${copy.jar.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- 3.把jar包拷贝到指定目录位置 -->
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<configuration>
<target>
<copy todir="${copy.jar.directory}">
<fileset dir="${project.build.directory}">
<include name="${project.artifactId}.${project.version}.jar"/>
</fileset>
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,36 @@
package com.whdc;
import com.github.jeffreyning.mybatisplus.conf.EnableMPP;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.BeansException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
/**
* @author
* @date 2022-06-26 0:17
*/
@Slf4j
@EnableMPP
@EnableWebMvc
@EnableKnife4j
@EnableScheduling
@SpringBootApplication
@MapperScan("com.whdc.mapper")
public class TtsskApplication {
public static void main(String[] args) {
try {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>> 启动程序 <<<<<<<<<<<<<<<<<<<<<<<<<<<");
SpringApplication.run(TtsskApplication.class, args);
} catch (BeansException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
}
}
}

View File

@ -0,0 +1,52 @@
package com.whdc.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author wanyan
* @since 2023-11-01
*/
@Getter
@Setter
@TableName("wq_r")
@Data
public class WqR {
@TableId(value = "stcd")
private String stcd;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("tm")
private Date tm;
@TableField("chlorophyll")
private BigDecimal chlorophyll;
@TableField("blueAlgae")
private BigDecimal blueAlgae;
@TableField("greenAlgae")
private BigDecimal greenAlgae;
@TableField("diatom")
private BigDecimal diatom;
@TableField("cryptomonas")
private BigDecimal cryptomonas;
}

View File

@ -0,0 +1,51 @@
package com.whdc.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author wanyan
* @since 2023-11-01
*/
@Getter
@Setter
@TableName("wq_real")
@Data
public class WqReal {
@TableId(value = "stcd")
private String stcd;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("tm")
private Date tm;
@TableField("chlorophyll")
private BigDecimal chlorophyll;
@TableField("blueAlgae")
private BigDecimal blueAlgae;
@TableField("greenAlgae")
private BigDecimal greenAlgae;
@TableField("diatom")
private BigDecimal diatom;
@TableField("cryptomonas")
private BigDecimal cryptomonas;
}

View File

@ -0,0 +1,17 @@
package com.whdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.whdc.entity.WqR;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper
* </p>
*
* @author wanyan
* @since 2023-11-01
*/
@Mapper
public interface WqRMapper extends BaseMapper<WqR> {
}

View File

@ -0,0 +1,17 @@
package com.whdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.whdc.entity.WqReal;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper
* </p>
*
* @author wanyan
* @since 2023-11-01
*/
@Mapper
public interface WqRealMapper extends BaseMapper<WqReal> {
}

View File

@ -0,0 +1,9 @@
package com.whdc.mqtt;
public class Config {
public static final String USERNAME = "wy";
public static final char[] PASSWORD = "Gsiot_890".toCharArray();
public static final String TOPIC_WQ_R = "/Algae/#";
}

View File

@ -0,0 +1,92 @@
package com.whdc.mqtt;
import com.alibaba.fastjson.JSON;
import com.whdc.entity.WqR;
import com.whdc.entity.WqReal;
import com.whdc.mapper.WqRMapper;
import com.whdc.mapper.WqRealMapper;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.Date;
@Configuration
@Slf4j
public class MQTTConfig {
@Autowired
private WqRMapper wqRMapper;
@Autowired
private WqRealMapper wqRealMapper;
@Value("${mqtt.broker}")
private String broker;
@Value("${mqtt.clientId}")
private String clientId;
@Value("${enableMqttListening}")
private Boolean enable;
private static Sub sub;
@PostConstruct
public void initMQTT() {
if (!enable) {
log.debug("开发环境不开启mqtt");
return;
}
log.debug("开启mqtt broker: %s, clientId: %s", broker, clientId);
Pub.BROKER = broker;
sub = new Sub(broker, clientId, Config.TOPIC_WQ_R);
sub.setOnMessageListener(new Sub.OnMessageListener() {
@Override
public void onMessage(String message) {
log.debug("mqtt: " + message);
System.out.println(message);
try {
WqR wqr = JSON.parseObject(message, WqR.class);
Date now = new Date();
wqr.setStcd("WQ");
wqr.setTm(now);
wqRMapper.insert(wqr);
WqReal wqReal = wqRealMapper.selectById("WQ");
if(wqReal == null){
wqReal = new WqReal();
}
wqReal.setChlorophyll(wqr.getChlorophyll());
wqReal.setBlueAlgae(wqr.getBlueAlgae());
wqReal.setGreenAlgae(wqr.getGreenAlgae());
wqReal.setDiatom(wqr.getDiatom());
wqReal.setCryptomonas(wqr.getCryptomonas());
wqReal.setTm(now);
if (wqReal.getStcd() == null) {
wqReal.setStcd("WQ");
wqRealMapper.insert(wqReal);
} else {
wqRealMapper.updateById(wqReal);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
});
new Thread(() -> {
try {
Thread.sleep(10 * 1000);
sub.connect(true);
} catch (MqttException e) {
e.printStackTrace();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}).start();
}
}

View File

@ -0,0 +1,54 @@
package com.whdc.mqtt;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class Pub {
private final String clientId;
private final String topic;
public static String BROKER;
private final int qos;
private MqttClient client;
public Pub(String clientId, String topic) {
this.clientId = clientId;
this.topic = topic;
this.qos = 0;
}
public Pub(String clientId, String topic, int qos) {
this.clientId = clientId;
this.topic = topic;
this.qos = qos;
}
public void connect() throws MqttException {
this.client = new MqttClient("tcp://120.24.5.249:3189", "mqttx_2b072a3c", new MemoryPersistence());
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setUserName(Config.USERNAME);
connOpts.setPassword(Config.PASSWORD);
connOpts.setCleanSession(true);
this.client.connect(connOpts);
}
public void close() {
try {
this.client.disconnectForcibly(200);
this.client.close(true);
} catch (MqttException e) {
e.printStackTrace();
}
}
public void pub(String msg) throws MqttException {
MqttMessage message = new MqttMessage(msg.getBytes());
message.setQos(qos);
this.client.publish(topic, message);
}
}

View File

@ -0,0 +1,84 @@
package com.whdc.mqtt;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class Sub {
private final String clientId;
private final String topic;
private final String broker;
private OnMessageListener onMessageListener;
private MqttClient client;
public Sub(String broker, String clientId, String topic) {
this.clientId = clientId;
this.topic = topic;
this.broker = broker;
}
public void setOnMessageListener(OnMessageListener listener) {
this.onMessageListener = listener;
}
public void connect() throws MqttException {
connect(true);
}
public void connect(boolean autoReconnect) throws MqttException {
this.client = new MqttClient(broker, this.clientId, new MemoryPersistence());
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setUserName(Config.USERNAME);
connOpts.setPassword(Config.PASSWORD);
connOpts.setCleanSession(true);
connOpts.setAutomaticReconnect(autoReconnect);
this.client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) {
byte[] payload = mqttMessage.getPayload();
String msg = new String(payload);
try {
Sub.this.onMessageListener.onMessage(msg);
} catch (Throwable e) {
e.printStackTrace();
}
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
});
this.client.connect(connOpts);
this.client.subscribe(this.topic, 0);
}
public void close() {
try {
this.client.disconnectForcibly(200);
this.client.close(true);
} catch (MqttException e) {
}
}
public interface OnMessageListener {
void onMessage(String message);
}
public static void main(String[] args) throws MqttException {
Sub sub = new Sub("tcp://120.24.5.249:3189","mqttx_2b072a3c", Config.TOPIC_WQ_R);
sub.setOnMessageListener(new OnMessageListener() {
@Override
public void onMessage(String message) {
System.out.println("received msg: " + message);
}
});
sub.connect(true);
}
}

View File

@ -0,0 +1,16 @@
package com.whdc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.whdc.entity.WqR;
/**
* <p>
*
* </p>
*
* @author wanyan
* @since 2023-11-01
*/
public interface WqRService extends IService<WqR> {
}

View File

@ -0,0 +1,20 @@
package com.whdc.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.whdc.entity.WqR;
import com.whdc.mapper.WqRMapper;
import com.whdc.service.WqRService;
import org.springframework.stereotype.Service;
/**
* <p>
*
* </p>
*
* @author wanyan
* @since 2023-11-01
*/
@Service
public class WqRServiceImp extends ServiceImpl<WqRMapper, WqR> implements WqRService {
}

View File

@ -0,0 +1,67 @@
server:
port: 12303
spring:
#数据库配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://rm-wz9n28sq10rz5b0u2o.mysql.rds.aliyuncs.com:3306/ttssk?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&useInformationSchema=true&serverTimezone=GMT%2B8&autoReconnect=true
username: fxkh
password: Fxkh_789_@
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
#jpa配置
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.DmDialect
knife4j:
enable: true
setting:
enableFooter: false
enableFooterCustom: true
footerCustomContent: Copyright 2018-[湖北纬皓端成科技有限公司](http://www.wavehorizon.cn)
documents: # 文档配置,可配置多个分组
- group: doc-knife4j-1.0.0
name: MarkDown文档
locations: classpath:markdown/*
- group: v1.0
name: v1.0
logging:
# level:
# org.springframework.boot.autoconfigure: error #spring的自动装配日志只打error否则debug输出的会打印很多自动装配的log信息到控制台
# com.whdc.zhzmkzapi.mapper: error
config: classpath:logback-spring.xml
mybatis:
mapper-locations: classpath:mapper/*.xml
# Sa-Token配置
sa-token:
# token 名称 (同时也是cookie名称)
token-name: token
# token 有效期, 24小时单位s, -1代表永不过期
timeout: 86400
# token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: true
# token风格
token-style: simple-uuid
# 是否输出操作日志
is-log: false
mqtt:
broker: tcp://120.24.5.249:3189
clientId: mqttx_2b172a3c
enableMqttListening: true

View File

@ -0,0 +1,206 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL如果设置为WARN则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时配置文档如果发生改变将会被重新加载默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。 当scan为true时此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<contextName>logback</contextName>
<!-- 文件切割大小 -->
<property name="maxFileSize" value="100MB"/>
<!-- 文档保留天数 -->
<property name="maxHistory" value="3"/>
<!-- 文档保留总大小 -->
<property name="totalSizeCap" value="1GB"/>
<!-- name的值是变量的名称value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后可以使“${}”来使用变量。 -->
<property name="log.path" value="./logs"/>
<!--0. 日志格式和颜色渲染 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- <property name="CONSOLE_LOG_PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n"/>-->
<!--1. 输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用只配置最底级别控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--2. 输出到文档-->
<!-- 2.1 level为 DEBUG 日志,时间滚动输出 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${log.path}/web_debug.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 -->
<fileNamePattern>${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录debug级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.2 level为 INFO 日志,时间滚动输出 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${log.path}/web_info.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.3 level为 WARN 日志,时间滚动输出 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${log.path}/web_warn.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录warn级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.4 level为 ERROR 日志,时间滚动输出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${log.path}/web_error.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><logger>仅有一个name属性 一个可选的level和一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
还有一个特俗值INHERITED或者同义词NULL代表强制执行上级的级别。
如果未设置此属性那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
<logger name="org.springframework.web" level="info"/>
<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
-->
<!--
使用mybatis的时候sql语句是debug下才会打印而这里我们只配置了info所以想要查看sql语句的话有以下两种操作
第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql不过这样日志那边会出现很多其他消息
第二种就是单独给dao下目录配置debug模式代码如下这样配置sql语句会打印其他还是正常info级别
【logging.level.org.mybatis=debug logging.level.dao=debug】
-->
<logger name="_org.springframework" level="warn"/>
<logger name="org.springframework" level="warn"/>
<logger name="com.baomidou" level="warn"/>
<logger name="org.mybatis.spring" level="error"/>
<logger name="org.apache.ibatis" level="warn"/>
<logger name="org.apache.http" level="error"/>
<logger name="io.lettuce.core" level="error" additivity="false"/>
<logger name="springfox.bean" level="error" additivity="false"/>
<logger name="springfox.documentation" level="error" additivity="false"/>
<logger name="org.hibernate.validator" level="error" additivity="false"/>
<logger name="io.netty" level="error" additivity="false"/>
<logger name="com.alibaba.druid" level="error" additivity="false"/>
<logger name="com.corundumstudio.socketio" level="error" additivity="false"/>
<logger name="org.mongodb.driver" level="error" additivity="false"/>
<logger name="org.tio" level="warn"/>
<logger name="org.apache.kafka" level="error"/>
<logger name="Validator" level="error"/>
<logger name="com.whdc.zhzmkzapi.tio" level="warn"/>
<logger name="com.whdc.zhzmkzv2.config.MQTTConfig" level="error"/>
<logger name="com.whdc.zhzmkzv2.mapper" level="error"/>
<logger name="org.apache.poi" level="error"/>
<logger name="com.alibaba.excel" level="error"/>
<!--
root节点是必选节点用来指定最基础的日志输出级别只有一个level属性
level:用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF不能设置为INHERITED或者同义词NULL。默认是DEBUG
标识这个appender将会添加到这个logger。
-->
<root level="debug">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</configuration>

BIN
src/main/resources/tpl.xlsx Normal file

Binary file not shown.