1. 程式人生 > >springboot整合swagger2企業專案搭建

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

路徑為: