hanqingsong 3 роки тому
коміт
8498cefb04

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
1
+HELP.md
2
+target/
3
+!.mvn/wrapper/maven-wrapper.jar
4
+!**/src/main/**/target/
5
+!**/src/test/**/target/
6
+
7
+### STS ###
8
+.apt_generated
9
+.classpath
10
+.factorypath
11
+.project
12
+.settings
13
+.springBeans
14
+.sts4-cache
15
+
16
+### IntelliJ IDEA ###
17
+.idea
18
+*.iws
19
+*.iml
20
+*.ipr
21
+
22
+### NetBeans ###
23
+/nbproject/private/
24
+/nbbuild/
25
+/dist/
26
+/nbdist/
27
+/.nb-gradle/
28
+build/
29
+!**/src/main/**/build/
30
+!**/src/test/**/build/
31
+
32
+### VS Code ###
33
+.vscode/

BIN
.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
1
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip
2
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

+ 316 - 0
mvnw

@@ -0,0 +1,316 @@
1
+#!/bin/sh
2
+# ----------------------------------------------------------------------------
3
+# Licensed to the Apache Software Foundation (ASF) under one
4
+# or more contributor license agreements.  See the NOTICE file
5
+# distributed with this work for additional information
6
+# regarding copyright ownership.  The ASF licenses this file
7
+# to you under the Apache License, Version 2.0 (the
8
+# "License"); you may not use this file except in compliance
9
+# with the License.  You may obtain a copy of the License at
10
+#
11
+#    https://www.apache.org/licenses/LICENSE-2.0
12
+#
13
+# Unless required by applicable law or agreed to in writing,
14
+# software distributed under the License is distributed on an
15
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+# KIND, either express or implied.  See the License for the
17
+# specific language governing permissions and limitations
18
+# under the License.
19
+# ----------------------------------------------------------------------------
20
+
21
+# ----------------------------------------------------------------------------
22
+# Maven Start Up Batch script
23
+#
24
+# Required ENV vars:
25
+# ------------------
26
+#   JAVA_HOME - location of a JDK home dir
27
+#
28
+# Optional ENV vars
29
+# -----------------
30
+#   M2_HOME - location of maven2's installed home dir
31
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
32
+#     e.g. to debug Maven itself, use
33
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35
+# ----------------------------------------------------------------------------
36
+
37
+if [ -z "$MAVEN_SKIP_RC" ] ; then
38
+
39
+  if [ -f /usr/local/etc/mavenrc ] ; then
40
+    . /usr/local/etc/mavenrc
41
+  fi
42
+
43
+  if [ -f /etc/mavenrc ] ; then
44
+    . /etc/mavenrc
45
+  fi
46
+
47
+  if [ -f "$HOME/.mavenrc" ] ; then
48
+    . "$HOME/.mavenrc"
49
+  fi
50
+
51
+fi
52
+
53
+# OS specific support.  $var _must_ be set to either true or false.
54
+cygwin=false;
55
+darwin=false;
56
+mingw=false
57
+case "`uname`" in
58
+  CYGWIN*) cygwin=true ;;
59
+  MINGW*) mingw=true;;
60
+  Darwin*) darwin=true
61
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
62
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
63
+    if [ -z "$JAVA_HOME" ]; then
64
+      if [ -x "/usr/libexec/java_home" ]; then
65
+        export JAVA_HOME="`/usr/libexec/java_home`"
66
+      else
67
+        export JAVA_HOME="/Library/Java/Home"
68
+      fi
69
+    fi
70
+    ;;
71
+esac
72
+
73
+if [ -z "$JAVA_HOME" ] ; then
74
+  if [ -r /etc/gentoo-release ] ; then
75
+    JAVA_HOME=`java-config --jre-home`
76
+  fi
77
+fi
78
+
79
+if [ -z "$M2_HOME" ] ; then
80
+  ## resolve links - $0 may be a link to maven's home
81
+  PRG="$0"
82
+
83
+  # need this for relative symlinks
84
+  while [ -h "$PRG" ] ; do
85
+    ls=`ls -ld "$PRG"`
86
+    link=`expr "$ls" : '.*-> \(.*\)$'`
87
+    if expr "$link" : '/.*' > /dev/null; then
88
+      PRG="$link"
89
+    else
90
+      PRG="`dirname "$PRG"`/$link"
91
+    fi
92
+  done
93
+
94
+  saveddir=`pwd`
95
+
96
+  M2_HOME=`dirname "$PRG"`/..
97
+
98
+  # make it fully qualified
99
+  M2_HOME=`cd "$M2_HOME" && pwd`
100
+
101
+  cd "$saveddir"
102
+  # echo Using m2 at $M2_HOME
103
+fi
104
+
105
+# For Cygwin, ensure paths are in UNIX format before anything is touched
106
+if $cygwin ; then
107
+  [ -n "$M2_HOME" ] &&
108
+    M2_HOME=`cygpath --unix "$M2_HOME"`
109
+  [ -n "$JAVA_HOME" ] &&
110
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
111
+  [ -n "$CLASSPATH" ] &&
112
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
113
+fi
114
+
115
+# For Mingw, ensure paths are in UNIX format before anything is touched
116
+if $mingw ; then
117
+  [ -n "$M2_HOME" ] &&
118
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
119
+  [ -n "$JAVA_HOME" ] &&
120
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
121
+fi
122
+
123
+if [ -z "$JAVA_HOME" ]; then
124
+  javaExecutable="`which javac`"
125
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
126
+    # readlink(1) is not available as standard on Solaris 10.
127
+    readLink=`which readlink`
128
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
129
+      if $darwin ; then
130
+        javaHome="`dirname \"$javaExecutable\"`"
131
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
132
+      else
133
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
134
+      fi
135
+      javaHome="`dirname \"$javaExecutable\"`"
136
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
137
+      JAVA_HOME="$javaHome"
138
+      export JAVA_HOME
139
+    fi
140
+  fi
141
+fi
142
+
143
+if [ -z "$JAVACMD" ] ; then
144
+  if [ -n "$JAVA_HOME"  ] ; then
145
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
146
+      # IBM's JDK on AIX uses strange locations for the executables
147
+      JAVACMD="$JAVA_HOME/jre/sh/java"
148
+    else
149
+      JAVACMD="$JAVA_HOME/bin/java"
150
+    fi
151
+  else
152
+    JAVACMD="`\\unset -f command; \\command -v java`"
153
+  fi
154
+fi
155
+
156
+if [ ! -x "$JAVACMD" ] ; then
157
+  echo "Error: JAVA_HOME is not defined correctly." >&2
158
+  echo "  We cannot execute $JAVACMD" >&2
159
+  exit 1
160
+fi
161
+
162
+if [ -z "$JAVA_HOME" ] ; then
163
+  echo "Warning: JAVA_HOME environment variable is not set."
164
+fi
165
+
166
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
167
+
168
+# traverses directory structure from process work directory to filesystem root
169
+# first directory with .mvn subdirectory is considered project base directory
170
+find_maven_basedir() {
171
+
172
+  if [ -z "$1" ]
173
+  then
174
+    echo "Path not specified to find_maven_basedir"
175
+    return 1
176
+  fi
177
+
178
+  basedir="$1"
179
+  wdir="$1"
180
+  while [ "$wdir" != '/' ] ; do
181
+    if [ -d "$wdir"/.mvn ] ; then
182
+      basedir=$wdir
183
+      break
184
+    fi
185
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
186
+    if [ -d "${wdir}" ]; then
187
+      wdir=`cd "$wdir/.."; pwd`
188
+    fi
189
+    # end of workaround
190
+  done
191
+  echo "${basedir}"
192
+}
193
+
194
+# concatenates all lines of a file
195
+concat_lines() {
196
+  if [ -f "$1" ]; then
197
+    echo "$(tr -s '\n' ' ' < "$1")"
198
+  fi
199
+}
200
+
201
+BASE_DIR=`find_maven_basedir "$(pwd)"`
202
+if [ -z "$BASE_DIR" ]; then
203
+  exit 1;
204
+fi
205
+
206
+##########################################################################################
207
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
208
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
209
+##########################################################################################
210
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
211
+    if [ "$MVNW_VERBOSE" = true ]; then
212
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
213
+    fi
214
+else
215
+    if [ "$MVNW_VERBOSE" = true ]; then
216
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
217
+    fi
218
+    if [ -n "$MVNW_REPOURL" ]; then
219
+      jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
220
+    else
221
+      jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
222
+    fi
223
+    while IFS="=" read key value; do
224
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
225
+      esac
226
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
227
+    if [ "$MVNW_VERBOSE" = true ]; then
228
+      echo "Downloading from: $jarUrl"
229
+    fi
230
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
231
+    if $cygwin; then
232
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
233
+    fi
234
+
235
+    if command -v wget > /dev/null; then
236
+        if [ "$MVNW_VERBOSE" = true ]; then
237
+          echo "Found wget ... using wget"
238
+        fi
239
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
240
+            wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
241
+        else
242
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
243
+        fi
244
+    elif command -v curl > /dev/null; then
245
+        if [ "$MVNW_VERBOSE" = true ]; then
246
+          echo "Found curl ... using curl"
247
+        fi
248
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
249
+            curl -o "$wrapperJarPath" "$jarUrl" -f
250
+        else
251
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
252
+        fi
253
+
254
+    else
255
+        if [ "$MVNW_VERBOSE" = true ]; then
256
+          echo "Falling back to using Java to download"
257
+        fi
258
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
259
+        # For Cygwin, switch paths to Windows format before running javac
260
+        if $cygwin; then
261
+          javaClass=`cygpath --path --windows "$javaClass"`
262
+        fi
263
+        if [ -e "$javaClass" ]; then
264
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
265
+                if [ "$MVNW_VERBOSE" = true ]; then
266
+                  echo " - Compiling MavenWrapperDownloader.java ..."
267
+                fi
268
+                # Compiling the Java class
269
+                ("$JAVA_HOME/bin/javac" "$javaClass")
270
+            fi
271
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
272
+                # Running the downloader
273
+                if [ "$MVNW_VERBOSE" = true ]; then
274
+                  echo " - Running MavenWrapperDownloader.java ..."
275
+                fi
276
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
277
+            fi
278
+        fi
279
+    fi
280
+fi
281
+##########################################################################################
282
+# End of extension
283
+##########################################################################################
284
+
285
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
286
+if [ "$MVNW_VERBOSE" = true ]; then
287
+  echo $MAVEN_PROJECTBASEDIR
288
+fi
289
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
290
+
291
+# For Cygwin, switch paths to Windows format before running java
292
+if $cygwin; then
293
+  [ -n "$M2_HOME" ] &&
294
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
295
+  [ -n "$JAVA_HOME" ] &&
296
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
297
+  [ -n "$CLASSPATH" ] &&
298
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
299
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
300
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
301
+fi
302
+
303
+# Provide a "standardized" way to retrieve the CLI args that will
304
+# work with both Windows and non-Windows executions.
305
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
306
+export MAVEN_CMD_LINE_ARGS
307
+
308
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
309
+
310
+exec "$JAVACMD" \
311
+  $MAVEN_OPTS \
312
+  $MAVEN_DEBUG_OPTS \
313
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
314
+  "-Dmaven.home=${M2_HOME}" \
315
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
316
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 188 - 0
mvnw.cmd

@@ -0,0 +1,188 @@
1
+@REM ----------------------------------------------------------------------------
2
+@REM Licensed to the Apache Software Foundation (ASF) under one
3
+@REM or more contributor license agreements.  See the NOTICE file
4
+@REM distributed with this work for additional information
5
+@REM regarding copyright ownership.  The ASF licenses this file
6
+@REM to you under the Apache License, Version 2.0 (the
7
+@REM "License"); you may not use this file except in compliance
8
+@REM with the License.  You may obtain a copy of the License at
9
+@REM
10
+@REM    https://www.apache.org/licenses/LICENSE-2.0
11
+@REM
12
+@REM Unless required by applicable law or agreed to in writing,
13
+@REM software distributed under the License is distributed on an
14
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+@REM KIND, either express or implied.  See the License for the
16
+@REM specific language governing permissions and limitations
17
+@REM under the License.
18
+@REM ----------------------------------------------------------------------------
19
+
20
+@REM ----------------------------------------------------------------------------
21
+@REM Maven Start Up Batch script
22
+@REM
23
+@REM Required ENV vars:
24
+@REM JAVA_HOME - location of a JDK home dir
25
+@REM
26
+@REM Optional ENV vars
27
+@REM M2_HOME - location of maven2's installed home dir
28
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
30
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31
+@REM     e.g. to debug Maven itself, use
32
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34
+@REM ----------------------------------------------------------------------------
35
+
36
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37
+@echo off
38
+@REM set title of command window
39
+title %0
40
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
42
+
43
+@REM set %HOME% to equivalent of $HOME
44
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45
+
46
+@REM Execute a user defined script before this one
47
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
49
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
50
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
51
+:skipRcPre
52
+
53
+@setlocal
54
+
55
+set ERROR_CODE=0
56
+
57
+@REM To isolate internal variables from possible post scripts, we use another setlocal
58
+@setlocal
59
+
60
+@REM ==== START VALIDATION ====
61
+if not "%JAVA_HOME%" == "" goto OkJHome
62
+
63
+echo.
64
+echo Error: JAVA_HOME not found in your environment. >&2
65
+echo Please set the JAVA_HOME variable in your environment to match the >&2
66
+echo location of your Java installation. >&2
67
+echo.
68
+goto error
69
+
70
+:OkJHome
71
+if exist "%JAVA_HOME%\bin\java.exe" goto init
72
+
73
+echo.
74
+echo Error: JAVA_HOME is set to an invalid directory. >&2
75
+echo JAVA_HOME = "%JAVA_HOME%" >&2
76
+echo Please set the JAVA_HOME variable in your environment to match the >&2
77
+echo location of your Java installation. >&2
78
+echo.
79
+goto error
80
+
81
+@REM ==== END VALIDATION ====
82
+
83
+:init
84
+
85
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86
+@REM Fallback to current working directory if not found.
87
+
88
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90
+
91
+set EXEC_DIR=%CD%
92
+set WDIR=%EXEC_DIR%
93
+:findBaseDir
94
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
95
+cd ..
96
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
97
+set WDIR=%CD%
98
+goto findBaseDir
99
+
100
+:baseDirFound
101
+set MAVEN_PROJECTBASEDIR=%WDIR%
102
+cd "%EXEC_DIR%"
103
+goto endDetectBaseDir
104
+
105
+:baseDirNotFound
106
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107
+cd "%EXEC_DIR%"
108
+
109
+:endDetectBaseDir
110
+
111
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112
+
113
+@setlocal EnableExtensions EnableDelayedExpansion
114
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116
+
117
+:endReadAdditionalConfig
118
+
119
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122
+
123
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
124
+
125
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127
+)
128
+
129
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131
+if exist %WRAPPER_JAR% (
132
+    if "%MVNW_VERBOSE%" == "true" (
133
+        echo Found %WRAPPER_JAR%
134
+    )
135
+) else (
136
+    if not "%MVNW_REPOURL%" == "" (
137
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
138
+    )
139
+    if "%MVNW_VERBOSE%" == "true" (
140
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
141
+        echo Downloading from: %DOWNLOAD_URL%
142
+    )
143
+
144
+    powershell -Command "&{"^
145
+		"$webclient = new-object System.Net.WebClient;"^
146
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148
+		"}"^
149
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150
+		"}"
151
+    if "%MVNW_VERBOSE%" == "true" (
152
+        echo Finished downloading %WRAPPER_JAR%
153
+    )
154
+)
155
+@REM End of extension
156
+
157
+@REM Provide a "standardized" way to retrieve the CLI args that will
158
+@REM work with both Windows and non-Windows executions.
159
+set MAVEN_CMD_LINE_ARGS=%*
160
+
161
+%MAVEN_JAVA_EXE% ^
162
+  %JVM_CONFIG_MAVEN_PROPS% ^
163
+  %MAVEN_OPTS% ^
164
+  %MAVEN_DEBUG_OPTS% ^
165
+  -classpath %WRAPPER_JAR% ^
166
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
167
+  %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
168
+if ERRORLEVEL 1 goto error
169
+goto end
170
+
171
+:error
172
+set ERROR_CODE=1
173
+
174
+:end
175
+@endlocal & set ERROR_CODE=%ERROR_CODE%
176
+
177
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
178
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
179
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
180
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
181
+:skipRcPost
182
+
183
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
184
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
185
+
186
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
187
+
188
+cmd /C exit /B %ERROR_CODE%

+ 78 - 0
pom.xml

@@ -0,0 +1,78 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4
+    <modelVersion>4.0.0</modelVersion>
5
+    <parent>
6
+        <groupId>org.springframework.boot</groupId>
7
+        <artifactId>spring-boot-starter-parent</artifactId>
8
+        <version>2.3.12.RELEASE</version>
9
+        <relativePath/> <!-- lookup parent from repository -->
10
+    </parent>
11
+    <groupId>com.unissoft</groupId>
12
+    <artifactId>smart-grp-nof-devices</artifactId>
13
+    <version>0.0.1-SNAPSHOT</version>
14
+    <name>smart-grp-nof-devices</name>
15
+    <description>Demo project for Spring Boot</description>
16
+    <properties>
17
+        <skipTests>true</skipTests>
18
+        <java.version>1.8</java.version>
19
+        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
20
+        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
21
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
23
+    </properties>
24
+    <dependencies>
25
+        <dependency>
26
+            <groupId>net.logstash.logback</groupId>
27
+            <artifactId>logstash-logback-encoder</artifactId>
28
+            <version>7.0.1</version>
29
+        </dependency>
30
+        <dependency>
31
+            <groupId>org.springframework.boot</groupId>
32
+            <artifactId>spring-boot-starter-web</artifactId>
33
+        </dependency>
34
+        <dependency>
35
+            <groupId>org.springframework.boot</groupId>
36
+            <artifactId>spring-boot-starter-test</artifactId>
37
+            <scope>test</scope>
38
+        </dependency>
39
+        <!-- mysql -->
40
+        <dependency>
41
+            <groupId>mysql</groupId>
42
+            <artifactId>mysql-connector-java</artifactId>
43
+        </dependency>
44
+        <!-- mybatis -->
45
+        <dependency>
46
+            <groupId>org.mybatis.spring.boot</groupId>
47
+            <artifactId>mybatis-spring-boot-starter</artifactId>
48
+            <version>2.1.4</version>
49
+        </dependency>
50
+        <dependency>
51
+            <groupId>com.unissoft</groupId>
52
+            <artifactId>smart-grp-nof-common</artifactId>
53
+            <version>0.0.1-SNAPSHOT</version>
54
+        </dependency>
55
+    </dependencies>
56
+
57
+    <!-- springCloud version -->
58
+    <dependencyManagement>
59
+        <dependencies>
60
+            <dependency>
61
+                <groupId>org.springframework.cloud</groupId>
62
+                <artifactId>spring-cloud-dependencies</artifactId>
63
+                <version>${spring-cloud.version}</version>
64
+                <type>pom</type>
65
+                <scope>import</scope>
66
+            </dependency>
67
+        </dependencies>
68
+    </dependencyManagement>
69
+    <build>
70
+        <finalName>${project.artifactId}</finalName>
71
+        <plugins>
72
+            <plugin>
73
+                <groupId>org.springframework.boot</groupId>
74
+                <artifactId>spring-boot-maven-plugin</artifactId>
75
+            </plugin>
76
+        </plugins>
77
+    </build>
78
+</project>

+ 19 - 0
src/main/java/com/unissoft/SmartGrpNofDevicesApplication.java

@@ -0,0 +1,19 @@
1
+package com.unissoft;
2
+
3
+import org.mybatis.spring.annotation.MapperScan;
4
+import org.slf4j.Logger;
5
+import org.slf4j.LoggerFactory;
6
+import org.springframework.boot.SpringApplication;
7
+import org.springframework.boot.autoconfigure.SpringBootApplication;
8
+
9
+@SpringBootApplication
10
+@MapperScan(basePackages = {"com.unissoft.**.mapper"})
11
+public class SmartGrpNofDevicesApplication {
12
+    private final static Logger log = LoggerFactory.getLogger(SmartGrpNofDevicesApplication.class);
13
+
14
+    public static void main(String[] args) {
15
+        SpringApplication.run(SmartGrpNofDevicesApplication.class, args);
16
+        log.error("SmartGrpNofDevicesApplication start!");
17
+    }
18
+
19
+}

+ 75 - 0
src/main/java/com/unissoft/enums/TypeEnum.java

@@ -0,0 +1,75 @@
1
+package com.unissoft.enums;
2
+
3
+/**
4
+ * @author qingsong.han
5
+ * @description: enum
6
+ * @create 2022-03-11 14:00
7
+ */
8
+public enum TypeEnum {
9
+    ED("600", "上传失败"),
10
+    S_NUL("S_NUL", "检测失败!"),
11
+    S_SOH("S_SOH", "检测开始!"),
12
+    S_STX("S_STX", "设备通讯异常!"),
13
+    S_ETX("S_ETX", "设备故障!"),
14
+    S_EOT("S_EOT", "未知原因!"),
15
+    S_2D_SOH("S_2D_SOH", "本地模式,无法远程控制!"),
16
+    S_EM("S_EM", "仓房号为空!"),
17
+    SM("SM", "设备正忙!");
18
+
19
+    private String code;
20
+    private String desc;
21
+
22
+    TypeEnum(String code, String desc) {
23
+        this.code = code;
24
+        this.desc = desc;
25
+    }
26
+
27
+    public String getCode() {
28
+        return code;
29
+    }
30
+
31
+    public void setCode(String code) {
32
+        this.code = code;
33
+    }
34
+
35
+    public String getDesc() {
36
+        return desc;
37
+    }
38
+
39
+    public void setDesc(String desc) {
40
+        this.desc = desc;
41
+    }
42
+
43
+    /**
44
+     * 处理socket返回结果
45
+     *
46
+     * @param str
47
+     * @return
48
+     */
49
+    public static String resultDispose(String str) {
50
+        if (str.contains("7E")) {
51
+            // 截取可以去空(例: 7E00/7E 00)
52
+            String subCode = str.substring(str.length() - 2, str.length());
53
+            switch (subCode) {
54
+                case "00":
55
+                    return S_NUL.getDesc(); // 失败
56
+                case "01":
57
+                    return S_SOH.getDesc(); // 成功
58
+                case "02":
59
+                    return S_STX.getDesc(); // 设备通讯异常
60
+                case "03":
61
+                    return S_ETX.getDesc(); // 设备故障
62
+                case "04":
63
+                    return S_EOT.getDesc(); // 未知原因
64
+                case "05":
65
+                    return S_2D_SOH.getDesc(); // 本地模式,无法远程控制
66
+                case "06":
67
+                    return SM.getDesc(); // 设备正忙
68
+                default:
69
+                    throw new IllegalArgumentException("I don't know socket response code");
70
+            }
71
+        }
72
+        return str;
73
+    }
74
+
75
+}

+ 36 - 0
src/main/java/com/unissoft/temperature/controller/GrainTemperatureController.java

@@ -0,0 +1,36 @@
1
+package com.unissoft.temperature.controller;
2
+
3
+import com.unissoft.common.ResultView;
4
+import com.unissoft.temperature.model.ReqPoints;
5
+import com.unissoft.temperature.service.GrainTemperatureService;
6
+import lombok.extern.slf4j.Slf4j;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.web.bind.annotation.PostMapping;
9
+import org.springframework.web.bind.annotation.RequestBody;
10
+import org.springframework.web.bind.annotation.RequestMapping;
11
+import org.springframework.web.bind.annotation.RestController;
12
+
13
+/**
14
+ * @author qingsong.han
15
+ * @description: 测温
16
+ * @create 2022-03-14 14:47
17
+ */
18
+@Slf4j
19
+@RestController
20
+@RequestMapping("/nof")
21
+public class GrainTemperatureController {
22
+
23
+    private GrainTemperatureService temperatureService;
24
+    @Autowired
25
+    public void setTemperatureService(GrainTemperatureService temperatureService){
26
+        this.temperatureService = temperatureService;
27
+    }
28
+
29
+    @PostMapping("/uploadGrainTemperatureData")
30
+    public ResultView uploadGrainTemperatureData(@RequestBody ReqPoints points) {
31
+        log.info("points: {}", points);
32
+        temperatureService.uploadGrainTemperatureData("", "");
33
+        return ResultView.success();
34
+    }
35
+
36
+}

+ 21 - 0
src/main/java/com/unissoft/temperature/model/ReqPoints.java

@@ -0,0 +1,21 @@
1
+package com.unissoft.temperature.model;
2
+
3
+import lombok.Data;
4
+
5
+import java.util.ArrayList;
6
+import java.util.Arrays;
7
+import java.util.Collections;
8
+import java.util.List;
9
+
10
+/**
11
+ * @author qingsong.han
12
+ * @description: 测温数据接收
13
+ * @create 2022-03-14 15:31
14
+ */
15
+@Data
16
+public class ReqPoints {
17
+
18
+    private String dataSource;
19
+    private List<TPoints> grainTemperatureData = new ArrayList<>();
20
+
21
+}

+ 30 - 0
src/main/java/com/unissoft/temperature/model/TPoints.java

@@ -0,0 +1,30 @@
1
+package com.unissoft.temperature.model;
2
+
3
+import lombok.Data;
4
+
5
+import java.math.BigDecimal;
6
+
7
+@Data
8
+public class TPoints {
9
+    /**
10
+     * 温度值 单位:摄氏度;坏点值以250表示;精确到小数点后1位;
11
+     * @return temp 温度值 单位:摄氏度;坏点值以250表示;精确到小数点后1位;
12
+     */
13
+    private BigDecimal temp;
14
+    /**
15
+     * 测温点在仓内的X坐标代表长度 代表列
16
+     * @return X 测温点在仓内的X坐标代表长度 代表列
17
+     */
18
+    private String x;
19
+    /**
20
+     * 测温点在仓内的Y坐标宽度方向 代表行
21
+     * @return Y 测温点在仓内的Y坐标宽度方向 代表行
22
+     */
23
+    private String y;
24
+    /**
25
+     * 测温点在仓内的Z坐标高度
26
+     * @return Z 测温点在仓内的Z坐标高度
27
+     */
28
+    private String z;
29
+
30
+}

+ 21 - 0
src/main/java/com/unissoft/temperature/service/GrainTemperatureService.java

@@ -0,0 +1,21 @@
1
+package com.unissoft.temperature.service;
2
+
3
+
4
+import com.unissoft.common.ResultView;
5
+
6
+/**
7
+ * @author qingsong.han
8
+ * @description: 测温
9
+ * @create 2022-03-14 14:41
10
+ */
11
+public interface GrainTemperatureService {
12
+
13
+    /**
14
+     * 上传保存测温数据
15
+     * @param dataSource 数据来源(第三方编码)
16
+     * @param grainTemperatureData json
17
+     * @return ResultView
18
+     */
19
+    ResultView uploadGrainTemperatureData(String dataSource, String grainTemperatureData);
20
+
21
+}

+ 22 - 0
src/main/java/com/unissoft/temperature/service/impl/GrainTemperatureServiceImpl.java

@@ -0,0 +1,22 @@
1
+package com.unissoft.temperature.service.impl;
2
+
3
+import com.unissoft.common.ResultView;
4
+import com.unissoft.temperature.service.GrainTemperatureService;
5
+import org.slf4j.Logger;
6
+import org.slf4j.LoggerFactory;
7
+import org.springframework.stereotype.Service;
8
+
9
+/**
10
+ * @author qingsong.han
11
+ * @description:
12
+ * @create 2022-03-11 15:04
13
+ */
14
+@Service
15
+public class GrainTemperatureServiceImpl implements GrainTemperatureService {
16
+    private final static Logger log = LoggerFactory.getLogger(GrainTemperatureServiceImpl.class);
17
+    @Override
18
+    public ResultView uploadGrainTemperatureData(String dataSource, String grainTemperatureData) {
19
+
20
+        return null;
21
+    }
22
+}

+ 92 - 0
src/main/java/com/unissoft/utils/HexConvertUtils.java

@@ -0,0 +1,92 @@
1
+package com.unissoft.utils;
2
+
3
+/**
4
+ * @author qingsong.han
5
+ * @description: 十六进制转换
6
+ * @create 2022-03-11 10:51
7
+ */
8
+public class HexConvertUtils {
9
+
10
+    /**
11
+     * 大写字符数组
12
+     */
13
+    private static final char[] DIGITS_UPPER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
14
+
15
+    /**
16
+     * 字符串转换成为16进制
17
+     *
18
+     * @param str
19
+     * @return
20
+     */
21
+    public static String strConvertHex(String str) {
22
+        str = str.toUpperCase();
23
+        StringBuilder sb = new StringBuilder();
24
+        // 获取str十进制数组
25
+        byte[] bs = str.getBytes();
26
+        int bit;
27
+        for (byte b : bs) {
28
+            bit = (b & 0x0f0) >> 4;
29
+            sb.append(DIGITS_UPPER[bit]);
30
+            bit = b & 0x0f;
31
+            sb.append(DIGITS_UPPER[bit]);
32
+        }
33
+        return sb.toString().trim();
34
+    }
35
+
36
+    /**
37
+     * 把16进制字符串转换成字节数组
38
+     *
39
+     * @param
40
+     * @return byte[]
41
+     */
42
+    public static byte[] hexStringToByte(String hex) {
43
+        hex = hex.toUpperCase();
44
+        int len = (hex.length() / 2);
45
+        byte[] result = new byte[len];
46
+        char[] achar = hex.toCharArray();
47
+        for (int i = 0; i < len; i++) {
48
+            int pos = i * 2;
49
+            result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
50
+        }
51
+        return result;
52
+    }
53
+
54
+    private static int toByte(char c) {
55
+        return (byte) "0123456789ABCDEF".indexOf(c);
56
+    }
57
+
58
+    /**
59
+     * 字节数组转成16进制表示格式的字符串
60
+     *
61
+     * @param byteArray 需要转换的字节数组
62
+     * @return 16进制表示格式的字符串
63
+     **/
64
+    public static String toHexString(byte[] byteArray) {
65
+        if (byteArray == null || byteArray.length < 1)
66
+            throw new IllegalArgumentException("this byteArray must not be null or empty");
67
+
68
+        final StringBuilder hexString = new StringBuilder();
69
+        for (byte b : byteArray) {
70
+            if ((b & 0xff) < 0x10)//0~F前面不零
71
+                hexString.append("0");
72
+            hexString.append(Integer.toHexString(0xFF & b));
73
+        }
74
+        return hexString.toString().toUpperCase();
75
+    }
76
+
77
+    /**
78
+     * 将10进制转换成16进制
79
+     *
80
+     * @param n
81
+     * @return
82
+     */
83
+    public static String decToHex(int n) {
84
+        StringBuffer s = new StringBuffer();
85
+        while (n != 0) {
86
+            s = s.append(DIGITS_UPPER[n % 16]);
87
+            n /= 16;
88
+        }
89
+        return s.reverse().toString();
90
+    }
91
+
92
+}

+ 30 - 0
src/main/java/com/unissoft/utils/UuidUtils.java

@@ -0,0 +1,30 @@
1
+package com.unissoft.utils;
2
+
3
+import java.util.UUID;
4
+
5
+/**
6
+ * @author qingsong.han
7
+ * @description: create uuid
8
+ * @create 2022-03-11 10:41
9
+ */
10
+public class UuidUtils {
11
+
12
+    /**
13
+     * create 32 bit uuid
14
+     *
15
+     * @return 32 bit uuid
16
+     */
17
+    public static String getCode32() {
18
+        UUID uuid = UUID.randomUUID();
19
+        return uuid.toString().replace("-", "");
20
+    }
21
+
22
+    /**
23
+     * create 32 bit uuid
24
+     * @return 36 bit uuid
25
+     */
26
+    public static String getCode36() {
27
+        return UUID.randomUUID().toString();
28
+    }
29
+
30
+}

+ 18 - 0
src/main/resources/application.yml

@@ -0,0 +1,18 @@
1
+server:
2
+  port: 7072
3
+  tomcat:
4
+    uri-encoding: UTF-8
5
+spring:
6
+  application:
7
+    name: smart-grp-nof-devices
8
+  jackson:
9
+    date-format: yyyy-MM-dd HH:mm:ss
10
+    time-zone: GMT+8
11
+  datasource:
12
+    # type: com.zaxxer.hikari.HikariDataSource
13
+    driver-class-name: com.mysql.cj.jdbc.Driver
14
+    url: jdbc:mysql://127.0.0.1:3306/smart_grp_nof?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
15
+    username: root
16
+    password: 123456
17
+logging:
18
+  config: classpath:logback-spring.xml

+ 189 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,189 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
3
+<Configuration scan="true" scanPeriod="10 seconds">
4
+    <!--<include resource="org/springframework/boot/logging/logback/base.xml" /> -->
5
+
6
+    <contextName>Logback For Boss</contextName>
7
+    <!-- 定义日志文件 输入位置 -->
8
+    <property name="logDir" value="./logback/devices" />
9
+    <!-- 日志最大的历史 30天 -->
10
+    <!--<property name="maxHistory" value="30" />-->
11
+    <property name="maxHistory" value="3" />
12
+    <!-- logstash -->
13
+    <appender name="logstash-tcp" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
14
+        <destination>172.16.0.8:17076</destination>
15
+        <!-- 日志输出编码 -->
16
+        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
17
+            <providers>
18
+                <timestamp>
19
+                    <timeZone>UTC</timeZone>
20
+                </timestamp>
21
+                <pattern>
22
+                    <pattern>
23
+                        {
24
+                        "level": "%level",
25
+                        "service": "smart-grp-nof-devices",
26
+                        "trace": "%X{X-B3-TraceId:-}",
27
+                        "span": "%X{X-B3-SpanId:-}",
28
+                        "exportable": "%X{X-Span-Export:-}",
29
+                        "pid": "${PID:-}",
30
+                        "thread": "%thread",
31
+                        "class": "%logger{40}",
32
+                        "message": "%message",
33
+                        "stack_trace": "%exception{5}"
34
+                        }
35
+                    </pattern>
36
+                </pattern>
37
+            </providers>
38
+        </encoder>
39
+    </appender>
40
+    <!-- 控制台输出日志 -->
41
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
42
+        <encoder>
43
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger-%msg%n</pattern>
44
+            <charset class="java.nio.charset.Charset">UTF-8</charset>
45
+        </encoder>
46
+    </appender>
47
+
48
+    <!-- ERROR级别日志 -->
49
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
50
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
51
+            <level>ERROR</level>
52
+            <onMatch>ACCEPT</onMatch>
53
+            <onMismatch>DENY</onMismatch>
54
+        </filter>
55
+        <rollingPolicy
56
+                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
57
+            <fileNamePattern>${logDir}\%d{yyyyMMdd}\error.log</fileNamePattern>
58
+            <maxHistory>${maxHistory}</maxHistory>
59
+        </rollingPolicy>
60
+        <encoder>
61
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
62
+                %msg%n</pattern>
63
+            <charset class="java.nio.charset.Charset">UTF-8</charset>
64
+        </encoder>
65
+        <append>false</append>
66
+        <prudent>false</prudent>
67
+    </appender>
68
+
69
+    <!-- WARN级别日志 -->
70
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
71
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
72
+            <level>WARN</level>
73
+            <onMatch>ACCEPT</onMatch>
74
+            <onMismatch>DENY</onMismatch>
75
+        </filter>
76
+        <rollingPolicy
77
+                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
78
+            <fileNamePattern>${logDir}\%d{yyyyMMdd}\warn.log</fileNamePattern>
79
+            <maxHistory>${maxHistory}</maxHistory>
80
+        </rollingPolicy>
81
+        <encoder>
82
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger-%msg%n</pattern>
83
+            <charset class="java.nio.charset.Charset">UTF-8</charset>
84
+        </encoder>
85
+        <append>false</append>
86
+        <prudent>false</prudent>
87
+    </appender>
88
+
89
+    <!-- INFO级别日志 -->
90
+    <appender name="INFO"
91
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
92
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
93
+            <level>INFO</level>
94
+            <onMatch>ACCEPT</onMatch>
95
+            <onMismatch>DENY</onMismatch>
96
+        </filter>
97
+        <rollingPolicy
98
+                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
99
+            <fileNamePattern>${logDir}\%d{yyyyMMdd}\info.log</fileNamePattern>
100
+            <maxHistory>${maxHistory}</maxHistory>
101
+        </rollingPolicy>
102
+        <encoder>
103
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger-%msg%n</pattern>
104
+            <charset class="java.nio.charset.Charset">UTF-8</charset>
105
+        </encoder>
106
+        <append>false</append>
107
+        <prudent>false</prudent>
108
+    </appender>
109
+
110
+    <!-- DEBUG级别日志 -->
111
+    <!--<appender name="DEBUG"
112
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
113
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
114
+            <level>DEBUG</level>
115
+            <onMatch>ACCEPT</onMatch>
116
+            <onMismatch>DENY</onMismatch>
117
+        </filter>
118
+        <rollingPolicy
119
+                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
120
+            <fileNamePattern>${logDir}\%d{yyyyMMdd}\debug.log</fileNamePattern>
121
+            <maxHistory>${maxHistory}</maxHistory>
122
+        </rollingPolicy>
123
+        <encoder>
124
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger-%msg%n</pattern>
125
+            <charset class="java.nio.charset.Charset">UTF-8</charset>
126
+        </encoder>
127
+        <append>false</append>
128
+        <prudent>false</prudent>
129
+    </appender>-->
130
+
131
+    <!--文件日志, 按照每天生成日志文件 -->
132
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
133
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
134
+            <!--日志文件输出的文件名-->
135
+            <FileNamePattern>${logDir}/%d{yyyyMMdd}/boss.%d{yyyy-MM-dd}.log</FileNamePattern>
136
+            <!--日志文件保留天数-->
137
+            <!--<MaxHistory>30</MaxHistory>-->
138
+            <MaxHistory>3</MaxHistory>
139
+        </rollingPolicy>
140
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
141
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
142
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
143
+        </encoder>
144
+        <!--日志文件最大的大小-->
145
+        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
146
+            <MaxFileSize>10MB</MaxFileSize>
147
+        </triggeringPolicy>
148
+    </appender>
149
+
150
+    <!-- 异步输出 -->
151
+    <appender name="dayLogAsyncAppender" class="ch.qos.logback.classic.AsyncAppender">
152
+        <includeCallerData>true</includeCallerData>
153
+        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
154
+        <discardingThreshold>0</discardingThreshold>
155
+        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
156
+        <queueSize>512</queueSize>
157
+        <appender-ref ref="FILE"/>
158
+    </appender>
159
+
160
+    <!--专为 spring 定制
161
+     -->
162
+    <logger name="org.springframework" level="info"/>
163
+    <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
164
+    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
165
+    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
166
+    <logger name="org.hibernate.SQL" level="DEBUG" />
167
+    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
168
+    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
169
+
170
+    <!--myibatis log configure-->
171
+    <!--
172
+    <logger name="com.apache.ibatis" level="TRACE"/>
173
+    <logger name="java.sql.Connection" level="DEBUG"/>
174
+    <logger name="java.sql.Statement" level="DEBUG"/>
175
+    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
176
+     -->
177
+    <!-- root级别 DEBUG -->
178
+    <root level="INFO">
179
+        <!-- 控制台输出 -->
180
+        <appender-ref ref="STDOUT" />
181
+        <!-- 文件输出 -->
182
+        <appender-ref ref="ERROR" />
183
+        <appender-ref ref="INFO" />
184
+        <appender-ref ref="WARN" />
185
+        <!--<appender-ref ref="DEBUG" />-->
186
+        <appender-ref ref="logstash-tcp"/>
187
+    </root>
188
+
189
+</Configuration>

+ 13 - 0
src/test/java/com/unissoft/SmartGrpNofDevicesApplicationTests.java

@@ -0,0 +1,13 @@
1
+package com.unissoft;
2
+
3
+import org.junit.jupiter.api.Test;
4
+import org.springframework.boot.test.context.SpringBootTest;
5
+
6
+@SpringBootTest
7
+class SmartGrpNofDevicesApplicationTests {
8
+
9
+    @Test
10
+    void contextLoads() {
11
+    }
12
+
13
+}