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.9.2</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
路径为:
https://github.com/fengyaojie/springBoot