Commit 8785deec authored by 宋欢's avatar 宋欢

Initial commit

parents
# Treat all files in this repo as binary, with no git magic updating
# line endings. Windows users contributing to Go will need to use a
# modern version of git and editors capable of LF line endings.
#
# We'll prevent accidental CRLF line endings from entering the repo
# via the git-review gofmt checks.
#
# See golang.org/issue/9281
* -text
# Concourse
concourse/credentials.yml
# Misc
*~
.#*
dependency-reduced-pom.xml
.DS_Store
data/
tmp/
*.sw[op]
*.class
classes/
test.log
*.log
logs/
work/
.bower-*
lib/
dist/
*.tar.gz
# Eclipse
# > the following should be created by `./gradlew eclipse`
.classpath
.project
# > ignore all eclipse settings by default
.settings
# > except the following, primarily for formatting purposes
!.settings/org.eclipse.jdt.core.prefs
!.settings/org.eclipse.jdt.ui.prefs
!.settings/org.eclipse.wst.html.core.prefs
# > other misc eclipse artifacts
.springBeans
bin
atlassian-ide-plugin.xml
# IDEA
.idea
*.iml
*.ipr
*.iws
out
# Gradle
.gradle
build
/build
/target
# Structure101
japp.java.hsp
# jspm
jspm_packages/
npm-debug.log
.cram/
# demo2
最简Web框架
==
<pre>
API接口文档:
http://localhost:8080/swagger-ui.html
</pre>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>demo2-biz</artifactId>
<version>1.0.1.SNAPSHOT</version>
<parent>
<groupId>cn.qmai.study.java.demo2</groupId>
<artifactId>demo2</artifactId>
<version>1.0.1.SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>cn.qmai.study.java.demo2</groupId>
<artifactId>demo2-common</artifactId>
<version>1.0.1.SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>demo2-common</artifactId>
<version>1.0.1.SNAPSHOT</version>
<parent>
<groupId>cn.qmai.study.java.demo2</groupId>
<artifactId>demo2</artifactId>
<version>1.0.1.SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>cn.qmai.study.java.demo2</groupId>
<artifactId>demo2</artifactId>
<version>1.0.1.SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package cn.qmai.study.java.demo2.common.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* Api文档配置
*
* @author 宋欢
*/
@ConfigurationProperties(prefix = "docket")
public class DocketProperties {
/**
* 启用?
*/
private Boolean enable;
/**
* 标题
*/
private String title;
/**
* 描述
*/
private String description;
/**
* 版本号
*/
private String version;
/**
* 许可证
*/
private String license;
/**
* 联系人
*/
private final Contact contact = new Contact();
/**
* 联系人
*/
public static class Contact {
/**
* 姓名
*/
private String name;
/**
* 链接
*/
private String url;
/**
* 邮箱
*/
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = (name != null) ? name.trim() : null;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = (url != null) ? url.trim() : null;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = (email != null) ? email.trim() : null;
}
}
public Boolean getEnable() {
return enable;
}
public void setEnable(Boolean enable) {
this.enable = enable;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = (title != null) ? title.trim() : null;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = (version != null) ? version.trim() : null;
}
public String getLicense() {
return license;
}
public void setLicense(String license) {
this.license = license;
}
public Contact getContact() {
return contact;
}
}
package cn.qmai.study.java.demo2.common.base;
/**
* 标准错误码
*
* @author 宋欢
*/
public interface Code {
/**
* OK
*/
int SUCCESS_NUM = 0;
/**
* -- 禁用,易误解成HttpStatus.OK --
*/
int IGNORE_NUM = 200;
/**
* 无访问权限
*/
int FORBIDDEN = 403;
/**
* 页面不存在
*/
int PAGE_NOT_FOUND = 404;
/**
* 请求方式不支持
*/
int METHOD_NOT_ALLOWED = 405;
/**
* 系统运行异常
*/
int SYSTEM_RUN_ERR = 500;
/**
* 脚本运行失败
*/
int SCRIPT_RUN_ERR = 501;
/**
* 幂等
*/
int IDEMPOTENT = 1000;
/**
* 重复请求
*/
int CONFLICT = 1001;
/**
* 参数错误
*/
int ARGS_ERR = 1101;
/**
* 结果错误
*/
int RESULT_ERR = 1102;
/**
* Json解析异常
*/
int JSON_SYNTAX_ERR = 1201;
/**
* Xml解析异常
*/
int XML_SYNTAX_ERR = 1202;
/**
* 未知错误
*/
int UNKNOWN_ERR = 2008;
}
package cn.qmai.study.java.demo2.common.base;
/**
* 标准错误枚举
*
* @author 宋欢
*/
public enum Error {
/**
* OK
*/
SUCCESS_NUM(Code.SUCCESS_NUM, Message.SUCCESS),
/**
* 无访问权限
*/
FORBIDDEN(Code.FORBIDDEN, Message.FORBIDDEN),
/**
* 页面不存在
*/
PAGE_NOT_FOUND(Code.PAGE_NOT_FOUND, Message.PAGE_NOT_FOUND),
/**
* 请求方式不支持
*/
METHOD_NOT_ALLOWED(Code.METHOD_NOT_ALLOWED, Message.METHOD_NOT_ALLOWED),
/**
* 系统运行异常
*/
SYSTEM_RUN_ERR(Code.SYSTEM_RUN_ERR, Message.SYSTEM_RUN_ERR),
/**
* 脚本运行失败
*/
SCRIPT_RUN_ERR(Code.SCRIPT_RUN_ERR, Message.SCRIPT_RUN_ERR),
/**
* 幂等
*/
IDEMPOTENT(Code.IDEMPOTENT, Message.IDEMPOTENT),
/**
* 重复请求
*/
CONFLICT(Code.CONFLICT, Message.CONFLICT),
/**
* 参数错误
*/
ARGS_ERR(Code.ARGS_ERR, Message.ARGS_ERR),
/**
* 结果错误
*/
RESULT_ERR(Code.RESULT_ERR, Message.RESULT_ERR),
/**
* Json解析异常
*/
JSON_SYNTAX_ERR(Code.JSON_SYNTAX_ERR, Message.JSON_SYNTAX_ERR),
/**
* Xml解析异常
*/
XML_SYNTAX_ERR(Code.XML_SYNTAX_ERR, Message.XML_SYNTAX_ERR),
/**
* 未知错误
*/
UNKNOWN_ERR(Code.UNKNOWN_ERR, Message.UNKNOWN_ERR),
;
/**
* 错误码
* 0:正确、> 0:错误、< 0:弃用
*/
private int code;
/**
* 错误信息
* ok:正确、!ok:错误
*/
private String message;
Error(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
package cn.qmai.study.java.demo2.common.base;
/**
* 标准错误信息
*
* @author 宋欢
*/
public interface Message {
/**
* OK
*/
String SUCCESS = "ok";
/**
* 无访问权限
*/
String FORBIDDEN = "forbidden";
/**
* 页面不存在
*/
String PAGE_NOT_FOUND = "page not found";
/**
* 请求方式不支持
*/
String METHOD_NOT_ALLOWED = "method not allowed";
/**
* 系统运行异常
*/
String SYSTEM_RUN_ERR = "system run error";
/**
* 脚本运行失败
*/
String SCRIPT_RUN_ERR = "script run error";
/**
* 幂等
*/
String IDEMPOTENT = "idempotent";
/**
* 重复请求
*/
String CONFLICT = "conflict";
/**
* 参数错误
*/
String ARGS_ERR = "args error";
/**
* 结果错误
*/
String RESULT_ERR = "result error";
/**
* Json解析异常
*/
String JSON_SYNTAX_ERR = "json syntax error";
/**
* Xml解析异常
*/
String XML_SYNTAX_ERR = "xml syntax error";
/**
* 未知错误
*/
String UNKNOWN_ERR = "unknown error";
}
package cn.qmai.study.java.demo2.common.base;
import cn.qmai.study.java.demo2.common.util.JsonParser;
import java.io.Serializable;
/**
* Data Transfer Object
*
* @author 宋欢
*/
public final class Result<T> implements Serializable {
/**
* 错误码
* 0:正确、> 0:错误、< 0:弃用
*/
private int code;
/**
* 错误信息
* ok:正确、!ok:错误
*/
private String message;
/**
* 内容
*/
private T data;
public Result() {
this.code = Code.SYSTEM_RUN_ERR;
this.message = Error.SYSTEM_RUN_ERR.getMessage();
}
public boolean isSuccess() {
return code == Error.SUCCESS_NUM.getCode();
}
@Override
public String toString() {
return JsonParser.toJson(this);
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
package cn.qmai.study.java.demo2.common.util;
import com.alibaba.fastjson.JSON;
import java.lang.reflect.Type;
/**
* Json解析
*
* @author 宋欢
*/
public final class JsonParser {
private JsonParser() {
}
/**
* Convert Object to Json String
*
* @param src the object
* @return a json string
*/
public static String toJson(Object src) {
return JSON.toJSONString(src);
}
/**
* Convert Json String to Object
*
* @param json the json string
* @param classOfT the class of T
* @return an object of type T from the string
*/
public static <T> T fromJson(String json, final Class<T> classOfT) {
return JSON.parseObject(json, classOfT);
}
/**
* Convert Json String to Object
*
* @param json the json string
* @param typeOfT new TypeToken<Collection<Foo>>(){}.getType();
* @return an object of type T from the string
*/
public static <T> T fromJson(String json, final Type typeOfT) {
return JSON.parseObject(json, typeOfT);
}
}
package cn.qmai.study.java.demo2.common.util;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.MappingJsonFactory;
import net.logstash.logback.decorate.JsonFactoryDecorator;
/**
* @author 宋欢
*/
public class LogJsonFactoryDecorator implements JsonFactoryDecorator {
@Override
public MappingJsonFactory decorate(MappingJsonFactory factory) {
// 禁用对非ascii码进行escape编码的特性
factory.disable(JsonGenerator.Feature.ESCAPE_NON_ASCII);
return factory;
}
}
package cn.qmai.study.java.demo2.common.util;
import cn.qmai.study.java.demo2.common.autoconfigure.DocketProperties;
import com.google.common.base.Preconditions;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
* Api文档
*
* @author 宋欢
*/
public final class Swagger2 {
private static final Logger logger = LoggerFactory.getLogger(Swagger2.class);
/**
* 文档类型
*/
private static final DocumentationType DOC_TYPE = DocumentationType.SWAGGER_2;
/**
* 启用?
*/
private final Boolean enable;
/**
* 标题
*/
private final String title;
/**
* 描述
*/
private final String description;
/**
* 版本号
*/
private final String version;
/**
* 许可证
*/
private final String license;
/**
* 联系人,姓名
*/
private final String name;
/**
* 联系人,链接
*/
private final String url;
/**
* 联系人,邮箱
*/
private final String email;
public Swagger2(DocketProperties properties) {
Preconditions.checkNotNull(properties, "properties can't be null");
DocketProperties.Contact contact = properties.getContact();
this.enable = properties.getEnable();
this.title = properties.getTitle();
this.description = properties.getDescription();
this.version = properties.getVersion();
this.license = properties.getLicense();
this.name = contact.getName();
this.url = contact.getUrl();
this.email = contact.getEmail();
logger.info("enable: {}, title: {}, description: {}, version: {}, license: {}, name: {}, url: {}, email: {}",
this.enable, this.title, this.description, this.version, this.license, this.name, this.url, this.email);
}
public Docket getDocket() {
return new Docket(DOC_TYPE).
enable(enable).
select().
apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).
paths(PathSelectors.any()).
build().
apiInfo(getInfo());
}
public ApiInfo getInfo() {
return new ApiInfoBuilder().
title(title).
description(description).
version(version).
contact(new Contact(name, url, email)).
license(license).
build();
}
public Boolean getEnable() {
return enable;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
public String getVersion() {
return version;
}
public String getLicense() {
return license;
}
public String getName() {
return name;
}
public String getUrl() {
return url;
}
public String getEmail() {
return email;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>demo2-web</artifactId>
<version>1.0.1.SNAPSHOT</version>
<parent>
<groupId>cn.qmai.study.java.demo2</groupId>
<artifactId>demo2</artifactId>
<version>1.0.1.SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>cn.qmai.study.java.demo2</groupId>
<artifactId>demo2-biz</artifactId>
<version>1.0.1.SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/profiles/${profiles.active}</directory>
</resource>
</resources>
</build>
</project>
\ No newline at end of file
package cn.qmai.study.java.demo2.web.api;
import cn.qmai.study.java.demo2.common.base.Error;
import cn.qmai.study.java.demo2.common.base.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 宋欢
*/
@Api(value = "TestController", tags = "测试")
@RestController
@RequestMapping(value = {"test"})
@Validated
public class TestController {
private static final Logger logger = LoggerFactory.getLogger(TestController.class);
@ApiOperation(value = "测试", response = Result.class, produces = "application/json")
@RequestMapping(value = "/test", method = RequestMethod.GET)
public Result<String> test() {
logger.info("TestController[test] trace");
Result<String> result = new Result<>();
result.setCode(Error.SUCCESS_NUM.getCode());
result.setMessage(Error.SUCCESS_NUM.getMessage());
return result;
}
}
package cn.qmai.study.java.demo2.web.main;
import cn.qmai.study.java.demo2.common.base.Error;
import cn.qmai.study.java.demo2.common.base.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
* @author 宋欢
*/
@ControllerAdvice
public class AppWideExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(AppWideExceptionHandler.class);
@ExceptionHandler(Throwable.class)
@ResponseBody
public Result<?> throwableHandler(Throwable tr, HttpServletRequest request) {
logger.error("AppWideExceptionHandler[throwableHandler], request: {}, throwable: ", request, tr);
Result<String> result = new Result<>();
result.setMessage(tr.getMessage());
if (tr instanceof HttpRequestMethodNotSupportedException) {
result.setCode(Error.METHOD_NOT_ALLOWED.getCode());
return result;
}
if (tr instanceof IllegalArgumentException) {
result.setCode(Error.ARGS_ERR.getCode());
result.setMessage(tr.getMessage());
return result;
}
result.setMessage(tr.getMessage());
return result;
}
}
package cn.qmai.study.java.demo2.web.main;
import cn.qmai.study.java.demo2.common.autoconfigure.DocketProperties;
import cn.qmai.study.java.demo2.common.util.Swagger2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author 宋欢
*/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableScheduling
@ComponentScan(basePackages = {"cn.qmai.study.java.demo2.common.autoconfigure", "cn.qmai.study.java.demo2"})
@EnableSwagger2
@EnableConfigurationProperties({DocketProperties.class})
public class Application {
@Autowired
private DocketProperties docketProperties;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Docket swaggerSpringMvcPlugin() {
Swagger2 swagger2 = new Swagger2(docketProperties);
return swagger2.getDocket();
}
}
application.profile=DEV
#
# Swagger
docket.enable=true
docket.title=Demo2
docket.version=1.0
application.profile=PRO
#
# Swagger
docket.enable=true
docket.title=Demo2
docket.version=1.0
server:
port: 8080
servlet:
context-path: /
tomcat:
uri-encoding: UTF-8
max-connections: 20000
max-threads: 1000
min-spare-threads: 30
spring:
profiles:
active: dev, config
application:
name: demo2
messages:
basename: i18n/messages
aop:
proxy-target-class: true
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="appName" value="crm-data-syn"/>
<!--引入springboot的默认日志配置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<jsonFactoryDecorator class="cn.qmai.study.java.demo2.common.util.LogJsonFactoryDecorator"/>
<providers>
<pattern>
<pattern>
{
"biz": "${appName}",
"thread": "%thread",
"message": "%ex",
"context": "%m",
"level": "%level",
"time": "%date{ISO8601}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>logs/file.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>logs/file.%i.log.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>1</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>200MB</maxFileSize>
</triggeringPolicy>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<jsonFactoryDecorator class="cn.qmai.study.java.demo2.common.util.LogJsonFactoryDecorator"/>
<providers>
<pattern>
<pattern>
{
"biz": "${appName}",
"thread": "%thread",
"message": "%ex",
"context": "%m",
"level": "%level",
"time": "%date{ISO8601}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<appender name="LOG_MONITOR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>logs/monitorFile.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>logs/monitor.file.%i.log.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>1</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>200MB</maxFileSize>
</triggeringPolicy>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<jsonFactoryDecorator class="cn.qmai.study.java.demo2.common.util.LogJsonFactoryDecorator"/>
<providers>
<pattern>
<pattern>
{
"biz": "${appName}",
"thread": "%thread",
"message": "%ex",
"context": "%m",
"level": "%level",
"time": "%date{ISO8601}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!-- 异步输出 -->
<appender name="LOG_MONITOR_FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<!-- 默认为 false,在队列满的时候 appender 会阻塞而不是丢弃信息。设置为 true,appender 不会阻塞你的应用而会将消息丢弃 -->
<neverBlock>true</neverBlock>
<!-- 不丢失日志。默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>1638</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能。默认值为256 -->
<queueSize>2048</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="LOG_MONITOR_FILE"/>
</appender>
<!-- 异步输出 -->
<appender name="ROLLING_FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<!-- 默认为 false,在队列满的时候 appender 会阻塞而不是丢弃信息。设置为 true,appender 不会阻塞你的应用而会将消息丢弃 -->
<neverBlock>true</neverBlock>
<!-- 不丢失日志。默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>1638</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能。默认值为256 -->
<queueSize>2048</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="ROLLING_FILE"/>
</appender>
<!-- 控制台输出日志级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<!-- <appender-ref ref="ROLLING_FILE_ASYNC"/> -->
</root>
<logger name="log_monitor" level="INFO" additivity="false">
<appender-ref ref="LOG_MONITOR_FILE_ASYNC"/>
</logger>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<groupId>cn.qmai.study.java.demo2</groupId>
<artifactId>demo2</artifactId>
<version>1.0.1.SNAPSHOT</version>
<properties>
<project.encoding>UTF-8</project.encoding>
<project.java.version>1.8</project.java.version>
<project.maven.version>3.7.0</project.maven.version>
<project.maven-plugin.version>3.3.0</project.maven-plugin.version>
<project.spring-boot.version>2.3.0.RELEASE</project.spring-boot.version>
<project.fastjson.version>1.2.36</project.fastjson.version>
<project.swagger.version>2.9.2</project.swagger.version>
<project.slf4j.version>1.7.30</project.slf4j.version>
<project.logback.version>6.4</project.logback.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>${project.spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${project.spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>${project.spring-boot.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${project.fastjson.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${project.swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${project.swagger.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${project.slf4j.version}</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>${project.logback.version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<modules>
<module>demo2-common</module>
<module>demo2-biz</module>
<module>demo2-web</module>
</modules>
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<profiles.active>pro</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${project.maven.version}</version>
<configuration>
<source>${project.java.version}</source>
<target>${project.java.version}</target>
<encoding>${project.encoding}</encoding>
<showWarnings>true</showWarnings>
<optimize>true</optimize>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment