springboot整合swagger2企業專案搭建
專案包結構圖:
1.本案例使用外部tomcat
(springboot版本如果太高外接tomcat只能使用8以上)
博主一開始使用2.0版本springboot 發現專案在tomcat7 下會穩定報錯,一番收縮後表示無解
九月 28, 2018 1:39:24 下午 org.apache.catalina.core.AprLifecycleListener init
資訊: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/fengyaojie/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
九月 28, 2018 1:39:25 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:oneeth-game' did not find a matching property.
九月 28, 2018 1:39:25 下午 org.apache.coyote.AbstractProtocol init
資訊: Initializing ProtocolHandler ["http-bio-9789"]
九月 28, 2018 1:39:25 下午 org.apache.coyote.AbstractProtocol init
資訊: Initializing ProtocolHandler ["ajp-bio-9790"]
九月 28, 2018 1:39:25 下午 org.apache.catalina.startup.Catalina load
資訊: Initialization processed in 1029 ms
九月 28, 2018 1:39:25 下午 org.apache.catalina.core.StandardService startInternal
資訊: Starting service Catalina
九月 28, 2018 1:39:25 下午 org.apache.catalina.core.StandardEngine startInternal
資訊: Starting Servlet Engine: Apache Tomcat/7.0.52
九月 28, 2018 1:39:29 下午 org.apache.catalina.startup.ContextConfig processAnnotationsJar
嚴重: Unable to process Jar entry [module-info.class] from Jar [jar:file:/Users/fengyaojie/Downloads/apache-tomcat-7.0.52/jenkinswebapps/ROOT/oneeth-game/WEB-INF/lib/log4j-api-2.10.0.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:136)
at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:59)
at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:208)
at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:118)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2055)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1931)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1897)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1882)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1314)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:873)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:371)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5355)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
但是8版本完美啟動,
如果必須使用7版本請將Springboot 版本降低到 1.5.4
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
改到低版本後會出現
將import 刪除掉
2.以處理打包多環境配置和多環境日誌列印
多環境如下圖:
日誌處理:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration debug="true" scan="true" scanPeriod="30 seconds"><!-- 'milliseconds','seconds','minutes'
and 'hours' -->
<springProperty scope="context" name="logPath" source="log.path"/>
<springProperty scope="context" name="logCommonLevel" source="log.commonLevel"/>
<springProperty scope="context" name="logSpringLevel" source="log.springLevel"/>
<springProperty scope="context" name="logName" source="log.name"/>
<contextName>${logName}</contextName>
<jmxConfigurator />
<!-- 控制檯輸出日誌 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%-5level [%contextName] %d{yyyy-MM-dd HH:mm:ss.SSS}
[%thread] %X{req.remoteHost} %X{req.requestURI} %X{username} %logger.%method:%L
- %msg%n</pattern>
</encoder>
</appender>
<!-- 檔案輸出日誌 (檔案大小策略進行檔案輸出,超過指定大小對檔案備份) -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logPath}${logName}.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- rollover daily -->
<FileNamePattern>${logPath}${logName}-log-%d{yyyy-MM-dd}.%i.zip</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize><!-- or whenever the file size reaches
5MB -->
</timeBasedFileNamingAndTriggeringPolicy>
<!-- <maxHistory></maxHistory> -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%-5level [%contextName] %d{yyyy-MM-dd HH:mm:ss.SSS}
[%thread] %X{req.remoteHost} %X{req.requestURI} %X{username}
%logger.%method:%L - %msg%n</Pattern>
</encoder>
</appender>
<appender name="FILE-ERROR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<OnMismatch>DENY</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
<File>${logPath}${logName}-err.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- rollover daily -->
<FileNamePattern>${logPath}${logName}-log-err-%d{yyyy-MM-dd}.%i.zip</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize><!-- or whenever the file size reaches
5MB -->
</timeBasedFileNamingAndTriggeringPolicy>
<!-- <maxHistory></maxHistory> -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%-5level [%contextName] %d{yyyy-MM-dd HH:mm:ss.SSS}
[%thread] %X{req.remoteHost} %X{req.requestURI} %X{username}
%logger.%method:%L - %msg%n</Pattern>
</encoder>
</appender>
<!--這裡指定logger name 是為jmx設定日誌級別做鋪墊 -->
<root level="${logCommonLevel}" >
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="FILE-ERROR" />
</root>
<logger name="com.oneeth"/>
<logger name="org.springframework" level="${logSpringLevel}" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE-ERROR" />
</logger>
<logger name="org.apache.http.impl.conn.PoolingHttpClientConnectionManager" level="INFO" >
<appender-ref ref="STDOUT" />
</logger>
</configuration>
每個環境列印日誌的路徑和級別 需要將上圖中的配置在每個環境配置檔案中進行賦值如下圖:
然後 我們講講整合swagger2
引入依賴
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.8.4</version>
</dependency>
這裡我應為嫌棄swagger2 原生ui醜 所以集成了別人的swagger2—bootstrap—ui
引入依賴後我們需要在專案中配置使用swagger2
然後就可以使用swagger2 了 如下圖:
在每個介面處都帶上swagger2 的註解和介面的引數和返回值 我們開發完每一個介面 介面文件就可以自動生成了
還可以線上除錯介面
很多東西 無法一一細說!!!請自行研究!
專案已上傳github
路徑為: