生成发布包

  1. 项目根目录上,右键选择 Run Mavenclean package -Dmaven.test.skip=true

image.png

  1. 在target目录找到生成的zip文件(项目名称),将此文件复制到服务器相应的文件夹。
  2. 这种生成方式依赖于项目根目录下的配置文件assembly.xml,如果需要修改发布内容,请修改此配置文件。

Windows服务器发布流程

配置JDK

1.上传

\\192.168.1.199\lyy\java\jdk-11.0.5_windows-x64_bin.zip 拷贝到服务器

2.解压

解压到:D:\jdk

3.配置环境变量(非必须)

image.png

4.检查JDK版本

检查JDK版本,输入命令:java -version
image.png

部署程序

1.上传

把生成的zip文件xa-wxc-server.zip 上传到服务器

2.解压

解压到目录:D:\app\xa-wxc-server

手动启动(非必须)

进行项目根目录:D:\app\xa-wxc-server
打开命令提示符,启动项目:xci.bat
Ctrl+C 终止程序

配置防火墙

image.png

image.png

image.png

配置为系统服务

配置为系统服务的好处是可以实现自动启动、进程异常退出后自动重启。
在Window平台配置为系统服务使用软件:AlwaysUp
下载地址:\\192.168.1.199\lyy\西安交通信息业务软件开发框架\alwaysup_10.5带注册机.rar

把xci.bat转成服务使用方法:

image.png

image.png

常见问题

服务端部署 - 图9
在系统服务中找到名为“Interactive Services Detection”的服务,禁用即可。

Linux服务器发布

Linux服务器采用的版本:CentOS Linux release 7.5.1804 (Core)
Linux远程控制工具:\\192.168.1.199\lyy\MobaXterm

检查系统版本:cat /etc/redhat-release 查看内存:free -g 查看磁盘空间:df -h Vim操作文档:https://www.cnblogs.com/junwen5599/p/9996873.html

配置JDK

1.上传

\\192.168.1.199\lyy\java\jdk-11.0.5_linux-x64_bin.tar.gz 拷贝到服务器目录 /usr/local/jdk-11.0.5_linux-x64_bin.tar.gz

2.解压

切换目录到:/usr/local
解压命令:tar -xzvf jdk-11.0.5_linux-x64_bin.tar.gz

3.配置环境变量(非必须)

打开文件:vim /etc/profile

移动到文件末尾,添加以下内容:

  1. #设置JAVA_HOME的路径
  2. export JAVA_HOME=/usr/local/jdk-11.0.5
  3. export PATH=${JAVA_HOME}/bin:$PATH

让配置文件立即生效:source /etc/profile

4.检查JDK版本

重新检查JDK版本,输入命令:java -version
image.png

部署程序

1.上传

把生成的zip文件xa-wxc-server.zip 上传到服务器:/usr/local/app/

2.解压

把目录切换到/usr/local/app/,执行解压命令:unzip xa-wxc-server.zip

3.设置脚本权限

进入项目根目录:/usr/local/app/xa-wxc-server/
给脚本添加执行权限:chmod +x ./xci.sh

手动启动(非必须)

进入项目根目录:/usr/local/app/xa-wxc-server/
启动:./xci.sh start
停止:./xci.sh stop
重启:./xci.sh restart
查看运行状态:./xci.sh status

不同的项目启动脚本startup.sh文件内容需要进行修改: 第9行中 FILE_NAME=xa-wxc-server,等于号后面的内容换成自己项目的名称 第45、61行中修改jvm内存参数

如果执行脚本以下错误:#/bin/sh^M:损坏的解释器: 没有那个文件或目录 原因是:脚本文件保存时使用了DOS格式,不要在 Windows下编辑脚本文件,否则经常会遇到这种问题。可以用vim打开,用:set ff=unix转换。 进入vim,执行:set ff=unix,之后执行:wq即可

配置防火墙

  1. 列出所有已打开的端口:firewall-cmd --list-port
  2. 打开指定的端口:firewall-cmd --zone=public --add-port=7011/tcp --permanent(打开7011端口,如果要打开其他端口,请修改为指定的端口)
  3. 重新加载防火墙配置使其生效:firewall-cmd --reload

配置为系统服务

配置为系统服务的好处是可以实现自动启动、进程异常退出后自动重启,配置系统服务按下面的步骤:

1.编写服务脚本

服务脚本一般以xxx.service命名,其中xxx表示服务名称。本项目使用:xa-wxc-server.service

xa-wxc-server.service
正式使用时必须把#的注释去掉,否则会出现错误

  1. [Unit]
  2. Description=xa-wxc-server.service #服务描述
  3. After=network.target #表示需要在某些服务启动之后启动,After和Before字段只涉及启动顺序,不涉及依赖关系
  4. [Service]
  5. Type=forking #以 fork 方式从父进程创建子进程,创建后父进程会立即退出
  6. ExecStart=/app/xci.sh service #启动当前服务的命令
  7. RestartSec=5 #自动重启当前服务间隔的秒数
  8. Restart=always #定义何种情况 Systemd 会自动重启当前服务;always:不管什么退出原因,都会重启(除了systemctl stop)
  9. PrivateTmp=true #表示给服务分配独立的临时空间
  10. SuccessExitStatus=143 #143是spring-boot服务被stop的时候的status code,如果不加上SuccessExitStatus=143,stop服务的时候会变成failed状态,而不是inactive状态。
  11. StartLimitInterval=0 #无限次重启,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启
  12. [Install]
  13. WantedBy=multi-user.target #表示多用户

2.复制服务脚本到系统目录

服务脚本编写完成后,可放到下面的位置(二选一):

  1. /usr/lib/systemd/system #系统服务,开机不需要登录就能运行的程序(可以用于开机自启)
  2. /usr/lib/systemd/user #用户服务,需要登录后才能运行程序

3.服务操作命令

  1. #启动
  2. systemctl start xa-wxc-server.service
  3. #停止
  4. systemctl stop xa-wxc-server.service
  5. #重启
  6. systemctl restart xa-wxc-server.service
  7. #状态
  8. systemctl status xa-wxc-server.service
  9. #以完整的日志消息显示服务状态
  10. systemctl status -l xa-wxc-server.service
  11. #开机自启
  12. systemctl enable xa-wxc-server.service
  13. #取消开机自启
  14. systemctl disable xa-wxc-server.service
  15. #是否加入自启动
  16. systemctl is-enabled xa-wxc-server.servic
  17. #重新加载服务脚本(当服务脚本修改后,调用此命令重新加载)
  18. systemctl daemon-reload

其他内容

另一种开机自动启动(非必须)

  1. 打开 vim /etc/rc.d/rc.local 文件
  2. 在末尾增加如下内容: /usr/local/app/xa-wxc-server/xci.sh start
  3. 给文件 /etc/rc.d/rc.local 增加执行权限: chmod +x /etc/rc.d/rc.local
  4. 重启进行测试

下载安装包目录

位于程序主目录下:/res/upgrade/ ,所有的补丁包也会自动上传到此目录。

image.png

xci.sh(程序启动脚本)

  1. #!/bin/sh
  2. ## java env
  3. #设置Java环境变量
  4. export JAVA_HOME=/usr/local/jdk-11.0.5
  5. export PATH=${JAVA_HOME}/bin:$PATH
  6. #设置启动jar文件名称
  7. FILE_NAME=xa-wxc-server
  8. #设置启动配置文件
  9. PROFILE=release
  10. #jar文件名
  11. JAR_NAME=${FILE_NAME}\.jar
  12. #shell脚本所在目录
  13. APP_WORK_PATH=$(dirname $(readlink -f $0))
  14. #控制台输出文件名
  15. CONSOLE_NAME="${FILE_NAME}.console.log"
  16. #使用说明,用来提示输入参数
  17. usage() {
  18. echo "xci.sh [start|stop|restart|status|service]"
  19. exit 1
  20. }
  21. #检查程序是否在运行
  22. is_exist(){
  23. pid=`ps -ef|grep ${JAR_NAME}|grep -v grep|awk '{print $2}' `
  24. #如果不存在返回1,存在返回0
  25. if [[ -z "${pid}" ]]; then
  26. return 1
  27. else
  28. return 0
  29. fi
  30. }
  31. #启动方法
  32. start(){
  33. is_exist
  34. if [[ $? -eq "0" ]]; then
  35. echo ">>> ${JAR_NAME} 已运行 pid=${pid} <<<"
  36. else
  37. #切换到shell脚本所在目录
  38. cd ${APP_WORK_PATH}
  39. nohup java -jar -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512m -Xmx512m -XX:MaxGCPauseMillis=500 --illegal-access=deny ${JAR_NAME} --spring.profiles.active=${PROFILE} >${CONSOLE_NAME} 2>&1 &
  40. sleep 2
  41. #echo $! > $PID
  42. echo ">>> $JAR_NAME 正在启动 pid=$! <<<"
  43. cd ~
  44. tail -f "${APP_WORK_PATH}/${CONSOLE_NAME}"
  45. fi
  46. }
  47. #启动服务
  48. service(){
  49. is_exist
  50. if [[ $? -eq "0" ]]; then
  51. echo ">>> ${JAR_NAME} 已运行 pid=${pid} <<<"
  52. else
  53. cd ${APP_WORK_PATH}
  54. nohup java -jar -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512m -Xmx512m -XX:MaxGCPauseMillis=500 --illegal-access=deny ${JAR_NAME} --spring.profiles.active=${PROFILE} >${CONSOLE_NAME} 2>&1 &
  55. fi
  56. }
  57. #停止方法
  58. stop(){
  59. is_exist
  60. if [[ $? -eq "0" ]]; then
  61. echo ">>> 正在停止进程 pid=$pid <<<"
  62. kill -9 ${pid}
  63. sleep 2
  64. echo ">>> $JAR_NAME 已停止 <<<"
  65. else
  66. echo ">>> ${JAR_NAME} 未运行 <<<"
  67. fi
  68. }
  69. #运行状态
  70. status(){
  71. is_exist
  72. if [[ $? -eq "0" ]]; then
  73. echo ">>> ${JAR_NAME} 已运行 pid=${pid} <<<"
  74. else
  75. echo ">>> ${JAR_NAME} 未运行 <<<"
  76. fi
  77. }
  78. #重启
  79. restart(){
  80. stop
  81. start
  82. }
  83. #根据输入参数,选择执行对应方法,不输入则执行使用说明
  84. case "$1" in
  85. "start")
  86. start
  87. ;;
  88. "service")
  89. service
  90. ;;
  91. "stop")
  92. stop
  93. ;;
  94. "status")
  95. status
  96. ;;
  97. "restart")
  98. restart
  99. ;;
  100. *)
  101. usage
  102. ;;
  103. esac
  104. exit 0

xa-wxc-server.service(服务脚本)

  1. [Unit]
  2. Description=xa-wxc-server.service
  3. After=network.target
  4. [Service]
  5. Type=forking
  6. ExecStart=/usr/local/app/xa-wxc-server/xci.sh service
  7. RestartSec=5
  8. Restart=always
  9. PrivateTmp=true
  10. SuccessExitStatus=143
  11. StartLimitInterval=0
  12. [Install]
  13. WantedBy=multi-user.target

logback-spring-release.xml(日志配置文件)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!--
  4. 说明:
  5. 1、日志级别及文件
  6. 日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中
  7. 例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志,
  8. 日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名
  9. 例如log-level-2013-12-21.0.log
  10. 其它级别的日志也是如此。
  11. 2、文件路径
  12. 若开发、测试用,在Eclipse中运行项目,则到Eclipse的安装路径查找logs文件夹,以相对路径../logs。
  13. 若部署到Tomcat下,则在Tomcat下的logs文件中
  14. 3、Appender
  15. FILEERROR对应error级别,文件名以log-error-xxx.log形式命名
  16. FILEWARN对应warn级别,文件名以log-warn-xxx.log形式命名
  17. FILEINFO对应info级别,文件名以log-info-xxx.log形式命名
  18. FILEDEBUG对应debug级别,文件名以log-debug-xxx.log形式命名
  19. stdout将日志信息输出到控制上,为方便开发测试使用
  20. -->
  21. <contextName>xci-platform-logger</contextName>
  22. <property name="LOG_PATH" value="./"/>
  23. <!--设置系统日志目录-->
  24. <property name="APPDIR" value="logs"/>
  25. <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
  26. <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
  27. <conversionRule conversionWord="wEx"
  28. converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
  29. <property name="CONSOLE_LOG_PATTERN"
  30. value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-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}}"/>
  31. <property name="FILE_LOG_PATTERN"
  32. value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  33. <!-- 错误日志记录器 -->
  34. <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
  35. <!-- 正在记录的日志文件的路径及文件名 -->
  36. <file>${LOG_PATH}/${APPDIR}/error.log</file>
  37. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  38. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  39. <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  40. 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
  41. <fileNamePattern>${LOG_PATH}/${APPDIR}/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  42. <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
  43. 命名日志文件,例如log-error-2013-12-21.0.log -->
  44. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  45. <maxFileSize>10MB</maxFileSize>
  46. </timeBasedFileNamingAndTriggeringPolicy>
  47. </rollingPolicy>
  48. <!-- 追加方式记录日志 -->
  49. <append>true</append>
  50. <!-- 日志文件的格式 -->
  51. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  52. <pattern>${FILE_LOG_PATTERN}</pattern>
  53. <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
  54. <charset>utf-8</charset>
  55. </encoder>
  56. <!-- 此日志文件只记录error级别的 -->
  57. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  58. <level>error</level>
  59. <onMatch>ACCEPT</onMatch>
  60. <onMismatch>DENY</onMismatch>
  61. </filter>
  62. </appender>
  63. <!-- 警告日志记录器 -->
  64. <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
  65. <!-- 正在记录的日志文件的路径及文件名 -->
  66. <file>${LOG_PATH}/${APPDIR}/warn.log</file>
  67. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  68. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  69. <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  70. 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
  71. <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  72. <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
  73. 命名日志文件,例如log-error-2013-12-21.0.log -->
  74. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  75. <maxFileSize>10MB</maxFileSize>
  76. </timeBasedFileNamingAndTriggeringPolicy>
  77. </rollingPolicy>
  78. <!-- 追加方式记录日志 -->
  79. <append>true</append>
  80. <!-- 日志文件的格式 -->
  81. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  82. <pattern>${FILE_LOG_PATTERN}</pattern>
  83. <charset>utf-8</charset>
  84. </encoder>
  85. <!-- 此日志文件只记录 warn 级别的 -->
  86. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  87. <level>warn</level>
  88. <onMatch>ACCEPT</onMatch>
  89. <onMismatch>DENY</onMismatch>
  90. </filter>
  91. </appender>
  92. <!-- 信息日志记录器 -->
  93. <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  94. <!-- 正在记录的日志文件的路径及文件名 -->
  95. <file>${LOG_PATH}/${APPDIR}/info.log</file>
  96. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  97. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  98. <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  99. 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
  100. <fileNamePattern>${LOG_PATH}/${APPDIR}/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  101. <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
  102. 命名日志文件,例如log-error-2013-12-21.0.log -->
  103. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  104. <maxFileSize>10MB</maxFileSize>
  105. </timeBasedFileNamingAndTriggeringPolicy>
  106. </rollingPolicy>
  107. <!-- 追加方式记录日志 -->
  108. <append>true</append>
  109. <!-- 日志文件的格式 -->
  110. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  111. <pattern>${FILE_LOG_PATTERN}</pattern>
  112. <charset>utf-8</charset>
  113. </encoder>
  114. <!-- 此日志文件只记录info级别的 -->
  115. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  116. <level>info</level>
  117. <onMatch>ACCEPT</onMatch>
  118. <onMismatch>DENY</onMismatch>
  119. </filter>
  120. </appender>
  121. <!-- SQL语句日志记录器 -->
  122. <appender name="SQLFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  123. <!-- 正在记录的日志文件的路径及文件名 -->
  124. <file>${LOG_PATH}/${APPDIR}/sql.log</file>
  125. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  126. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  127. <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  128. 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
  129. <fileNamePattern>${LOG_PATH}/${APPDIR}/sql/sql-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  130. <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
  131. 命名日志文件,例如log-error-2013-12-21.0.log -->
  132. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  133. <maxFileSize>10MB</maxFileSize>
  134. </timeBasedFileNamingAndTriggeringPolicy>
  135. </rollingPolicy>
  136. <!-- 追加方式记录日志 -->
  137. <append>true</append>
  138. <!-- 日志文件的格式 -->
  139. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  140. <pattern>${FILE_LOG_PATTERN}</pattern>
  141. <charset>utf-8</charset>
  142. </encoder>
  143. <!-- 此日志文件只记录debug级别的 -->
  144. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  145. <level>debug</level>
  146. <onMatch>ACCEPT</onMatch>
  147. <onMismatch>DENY</onMismatch>
  148. </filter>
  149. </appender>
  150. <!-- SQL语句日志记录器 -->
  151. <appender name="WebLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  152. <!-- 正在记录的日志文件的路径及文件名 -->
  153. <file>${LOG_PATH}/${APPDIR}/web.log</file>
  154. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  155. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  156. <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
  157. 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
  158. <fileNamePattern>${LOG_PATH}/${APPDIR}/sql/web-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  159. <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
  160. 命名日志文件,例如log-error-2013-12-21.0.log -->
  161. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  162. <maxFileSize>10MB</maxFileSize>
  163. </timeBasedFileNamingAndTriggeringPolicy>
  164. </rollingPolicy>
  165. <!-- 追加方式记录日志 -->
  166. <append>true</append>
  167. <!-- 日志文件的格式 -->
  168. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  169. <pattern>${FILE_LOG_PATTERN}</pattern>
  170. <charset>utf-8</charset>
  171. </encoder>
  172. <!-- 此日志文件只记录debug级别的 -->
  173. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  174. <level>info</level>
  175. <onMatch>ACCEPT</onMatch>
  176. <onMismatch>DENY</onMismatch>
  177. </filter>
  178. </appender>
  179. <!-- 控制台日志记录器 -->
  180. <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
  181. <!--encoder 默认配置为PatternLayoutEncoder-->
  182. <encoder>
  183. <pattern>${CONSOLE_LOG_PATTERN}</pattern>
  184. <charset>utf-8</charset>
  185. </encoder>
  186. <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
  187. <!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
  188. <!-- <level>debug</level>-->
  189. <!--</filter>-->
  190. </appender>
  191. <!--TRACE, DEBUG, INFO, WARN, ERROR, ALL, OFF, INHERITED-->
  192. <!--addtivity: 是否向上级loger传递打印信息。默认是true。-->
  193. <logger name="org.springframework" level="info"/>
  194. <logger name="org.hibernate" level="info"/>
  195. <logger name="net.sf.ehcache" level="info"/>
  196. <logger name="net.sf.ehcache.statistics" level="info"/>
  197. <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="warn"/>
  198. <logger name="org.springframework.cache" level="debug"/>
  199. <logger name="org.quartz.core" level="warn"/>
  200. <logger name="org.springframework.scheduling.quartz" level="warn"/>
  201. <logger name="com.xci" level="info"/>
  202. <!--
  203. <logger name="springfox.documentation.spring.web" level="warn"/>
  204. <logger name="org.springframework.scheduling" level="warn"/>
  205. <logger name="org.springframework.web.context" level="warn"/>
  206. <logger name="org.apache.coyote.http11" level="warn"/>
  207. <logger name="org.apache.catalina" level="warn"/>
  208. <logger name="org.springframework.context.support" level="warn"/>
  209. <logger name="org.springframework.web.servlet" level="warn"/>
  210. -->
  211. <logger name="com.xci.sys.dao" level="debug" additivity="false">
  212. <appender-ref ref="SQLFile"/>
  213. </logger>
  214. <logger name="com.xci.xa.wxc.server.modules.sch.dao" level="debug" additivity="false">
  215. <appender-ref ref="SQLFile"/>
  216. </logger>
  217. <logger name="com.xci.xa.wxc.server.modules.wx.dao" level="debug" additivity="false">
  218. <appender-ref ref="SQLFile"/>
  219. </logger>
  220. <!--对于类路径以 com.example.logback 开头的Logger,输出级别设置为warn-->
  221. <!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
  222. <!--<logger tableName="com.example.logback" level="warn"/>-->
  223. <!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
  224. <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
  225. <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
  226. <!--<logger tableName="mytest" level="info" additivity="false">-->
  227. <!-- <appender-ref ref="stdout"/>-->
  228. <!--</logger>-->
  229. <!--由于设置了 additivity="false" ,所以输出时不会使用rootLogger的appender-->
  230. <!--但是这个logger本身又没有配置appender,所以使用这个logger输出日志的话就不会输出到任何地方-->
  231. <!--<logger tableName="mytest2" level="info" additivity="false"/>-->
  232. <!--root是默认的logger-->
  233. <!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 -->
  234. <root level="info">
  235. <!--生产环境将请打开注释-->
  236. <appender-ref ref="FILEERROR"/>
  237. <appender-ref ref="FILEWARN"/>
  238. <appender-ref ref="FILEINFO"/>
  239. <!-- 生产环境将请 Console 去掉 -->
  240. <appender-ref ref="Console"/>
  241. </root>
  242. </configuration>

application-release.yml(应用程序配置文件)

  1. server:
  2. port: 6070 #服务器端口
  3. logging:
  4. config: file:config/logback-spring-release.xml #日志配置文件路径
  5. spring:
  6. datasource:
  7. driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
  8. url: jdbc:sqlserver://192.168.1.226:1433;DatabaseName=xa_wxc_management
  9. hikari:
  10. username: sa
  11. password: sa
  12. servlet:
  13. multipart:
  14. max-request-size: 200MB
  15. max-file-size: 200MB
  16. swagger:
  17. basic:
  18. password: xci
  19. enable: true
  20. username: xci
  21. xci:
  22. web:
  23. app-id: 123
  24. upload:
  25. allow-max-size: 870400
  26. root: /res
  27. allow-extension: gif, jpg, jpeg, png, bmp, flv, mp3, mp4, wav, wma, avi, mpg,rmvb,zip, rar, doc, docx, xls, xlsx, ppt, pptx, txt, pdf,repx,json,xml
  28. api:
  29. valid-timestamp: false
  30. timestamp-offset: 120
  31. response-body-encrypt: false
  32. resolving-ip-location: true
  33. request-body-decrypt: false
  34. swagger:
  35. enabled: true

yml语法规则

  • k: v 表示键值对关系,冒号后面必须有一个空格
  • 使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的
  • 大小写敏感
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 松散表示,java中对于驼峰命名法,可用原名或使用-代替驼峰,如java中的lastName属性,在yml中使用lastName或 last-name都可正确映射。

assembly.xml(打包配置文件)

  1. <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  4. <id>1.0</id>
  5. <formats>
  6. <!--打包的文件格式,也可以有:dir war zip-->
  7. <format>zip</format>
  8. </formats>
  9. <!--压缩包下是否生成和项目名相同的根目录-->
  10. <includeBaseDirectory>true</includeBaseDirectory>
  11. <dependencySets>
  12. <dependencySet>
  13. <outputDirectory>lib</outputDirectory>
  14. <useProjectArtifact>false</useProjectArtifact>
  15. <!--<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>-->
  16. </dependencySet>
  17. </dependencySets>
  18. <fileSets>
  19. <fileSet>
  20. <directory>target</directory>
  21. <outputDirectory/>
  22. <includes>
  23. <include>*.jar</include>
  24. </includes>
  25. </fileSet>
  26. <fileSet>
  27. <!--将bin目录下的文件全部复制到根目录-->
  28. <directory>bin</directory>
  29. <outputDirectory/>
  30. </fileSet>
  31. <fileSet>
  32. <!--将res/report复制到输出目录下面的res/report-->
  33. <directory>res/report</directory>
  34. <outputDirectory>res/report</outputDirectory>
  35. </fileSet>
  36. <fileSet>
  37. <!--将res/app复制到输出目录下面的res/app-->
  38. <directory>res/app</directory>
  39. <outputDirectory>res/app</outputDirectory>
  40. </fileSet>
  41. <fileSet>
  42. <!--将res/app复制到输出目录下面的res/setting-->
  43. <directory>res/setting</directory>
  44. <outputDirectory>res/setting</outputDirectory>
  45. </fileSet>
  46. <fileSet>
  47. <!--将target/classes目录下面的application-release.yml和logback-spring-release.xml复制到输出目录的config目录-->
  48. <directory>target/classes</directory>
  49. <outputDirectory>config</outputDirectory>
  50. <includes>
  51. <include>application-release.yml</include>
  52. <include>logback-spring-release.xml</include>
  53. <!--如果需要包含其他文件请写入-->
  54. <!--<include>*.properties</include>-->
  55. </includes>
  56. </fileSet>
  57. <fileSet>
  58. <!--将target/classes目录下面的 static 子目录下面的所有文件都复制到输入目录下的 static/-->
  59. <directory>target/classes</directory>
  60. <outputDirectory/>
  61. <includes>
  62. <include>static/**</include>
  63. </includes>
  64. </fileSet>
  65. <fileSet>
  66. <!--将target/classes目录下面的 templates 子目录下面的所有文件都复制到输入目录下的 templates/-->
  67. <directory>target/classes</directory>
  68. <outputDirectory/>
  69. <includes>
  70. <include>templates/**</include>
  71. </includes>
  72. </fileSet>
  73. </fileSets>
  74. </assembly>