✨ 添加配置信息
This commit is contained in:
parent
2127fb9fb0
commit
d4214d72d3
|
@ -31,6 +31,9 @@
|
||||||
<maven.compiler.source>17</maven.compiler.source>
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
<java.version>17</java.version>
|
<java.version>17</java.version>
|
||||||
|
<mysql.version>9.2.0</mysql.version>
|
||||||
|
<HikariCP.version>6.2.1</HikariCP.version>
|
||||||
|
<mybatis-plus.version>3.5.6</mybatis-plus.version>
|
||||||
<knife4j.version>4.5.0</knife4j.version>
|
<knife4j.version>4.5.0</knife4j.version>
|
||||||
<font-awesome.version>5.15.4</font-awesome.version>
|
<font-awesome.version>5.15.4</font-awesome.version>
|
||||||
<bootstrap.version>5.1.3</bootstrap.version>
|
<bootstrap.version>5.1.3</bootstrap.version>
|
||||||
|
@ -68,6 +71,23 @@
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- mysql 和 mybatis-plus -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
|
||||||
|
<version>${mybatis-plus.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-j</artifactId>
|
||||||
|
<version>${mysql.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.zaxxer</groupId>
|
||||||
|
<artifactId>HikariCP</artifactId>
|
||||||
|
<version>${HikariCP.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba.fastjson2</groupId>
|
<groupId>com.alibaba.fastjson2</groupId>
|
||||||
<artifactId>fastjson2</artifactId>
|
<artifactId>fastjson2</artifactId>
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.spring.domain.vo.result;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封装分页查询结果
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Schema(name = "PageResult 对象", title = "分页返回结果", description = "分页返回结果")
|
||||||
|
public class PageResult<T> implements Serializable {
|
||||||
|
|
||||||
|
@Schema(name = "pageNo", title = "当前页")
|
||||||
|
private Long pageNo;
|
||||||
|
|
||||||
|
@Schema(name = "pageSize", title = "每页记录数")
|
||||||
|
private Long pageSize;
|
||||||
|
|
||||||
|
@Schema(name = "total", title = "总记录数")
|
||||||
|
private Long total;
|
||||||
|
|
||||||
|
@Schema(name = "list", title = "当前页数据集合")
|
||||||
|
private List<T> list;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,173 @@
|
||||||
|
package com.spring.domain.vo.result;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Result<T> {
|
||||||
|
// 状态码
|
||||||
|
private Integer code;
|
||||||
|
// 返回消息
|
||||||
|
private String message;
|
||||||
|
// 返回数据
|
||||||
|
private T data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 自定义返回体
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @return Result<T>
|
||||||
|
*/
|
||||||
|
protected static <T> Result<T> build(T data) {
|
||||||
|
Result<T> result = new Result<>();
|
||||||
|
result.setData(data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 自定义返回体,使用ResultCodeEnum构建
|
||||||
|
*
|
||||||
|
* @param body 返回体
|
||||||
|
* @param codeEnum 返回状态码
|
||||||
|
* @return Result<T>
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> build(T body, ResultCodeEnum codeEnum) {
|
||||||
|
Result<T> result = build(body);
|
||||||
|
result.setCode(codeEnum.getCode());
|
||||||
|
result.setMessage(codeEnum.getMessage());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 自定义返回体
|
||||||
|
*
|
||||||
|
* @param body 返回体
|
||||||
|
* @param code 返回状态码
|
||||||
|
* @param message 返回消息
|
||||||
|
* @return Result<T>
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> build(T body, Integer code, String message) {
|
||||||
|
Result<T> result = build(body);
|
||||||
|
result.setCode(code);
|
||||||
|
result.setMessage(message);
|
||||||
|
result.setData(null);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作成功
|
||||||
|
*
|
||||||
|
* @return Result<T>
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success() {
|
||||||
|
return success(null, ResultCodeEnum.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作成功
|
||||||
|
*
|
||||||
|
* @param data baseCategory1List
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(T data) {
|
||||||
|
return build(data, ResultCodeEnum.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作成功-状态码
|
||||||
|
*
|
||||||
|
* @param codeEnum 状态码
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(ResultCodeEnum codeEnum) {
|
||||||
|
return success(null, codeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作成功-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param codeEnum 状态码
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(T data, ResultCodeEnum codeEnum) {
|
||||||
|
return build(data, codeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param message 错误信息
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(T data, String message) {
|
||||||
|
return build(data, 200, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param code 状态码
|
||||||
|
* @param message 错误信息
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(T data, Integer code, String message) {
|
||||||
|
return build(data, code, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error() {
|
||||||
|
return Result.build(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(T data) {
|
||||||
|
return build(data, ResultCodeEnum.FAIL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-状态码
|
||||||
|
*
|
||||||
|
* @param codeEnum 状态码
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(ResultCodeEnum codeEnum) {
|
||||||
|
return build(null, codeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param codeEnum 状态码
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(T data, ResultCodeEnum codeEnum) {
|
||||||
|
return build(data, codeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param code 状态码
|
||||||
|
* @param message 错误信息
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(T data, Integer code, String message) {
|
||||||
|
return build(data, code, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param message 错误信息
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(T data, String message) {
|
||||||
|
return build(null, 500, message);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
package com.spring.domain.vo.result;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一返回结果状态信息类
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum ResultCodeEnum {
|
||||||
|
// 成功操作 200
|
||||||
|
SUCCESS(200, "操作成功"),
|
||||||
|
LOAD_FINISHED(200, "加载完成"),
|
||||||
|
ADD_SUCCESS(200, "添加成功"),
|
||||||
|
UPDATE_SUCCESS(200, "修改成功"),
|
||||||
|
DELETE_SUCCESS(200, "删除成功"),
|
||||||
|
SORT_SUCCESS(200, "排序成功"),
|
||||||
|
SUCCESS_UPLOAD(200, "上传成功"),
|
||||||
|
SUCCESS_LOGOUT(200, "退出成功"),
|
||||||
|
EMAIL_CODE_REFRESH(200, "邮箱验证码已刷新"),
|
||||||
|
EMAIL_CODE_SEND_SUCCESS(200, "邮箱验证码已发送"),
|
||||||
|
|
||||||
|
// 验证错误 201
|
||||||
|
USERNAME_OR_PASSWORD_NOT_EMPTY(201, "用户名或密码不能为空"),
|
||||||
|
EMAIL_CODE_NOT_EMPTY(201, "邮箱验证码不能为空"),
|
||||||
|
SEND_EMAIL_CODE_NOT_EMPTY(201, "请先发送邮箱验证码"),
|
||||||
|
EMAIL_CODE_NOT_MATCHING(201, "邮箱验证码不匹配"),
|
||||||
|
LOGIN_ERROR(500, "账号或密码错误"),
|
||||||
|
LOGIN_ERROR_USERNAME_PASSWORD_NOT_EMPTY(201, "登录信息不能为空"),
|
||||||
|
GET_BUCKET_EXCEPTION(201, "获取文件信息失败"),
|
||||||
|
SEND_MAIL_CODE_ERROR(201, "邮件发送失败"),
|
||||||
|
EMAIL_CODE_EMPTY(201, "邮箱验证码过期或不存在"),
|
||||||
|
EMAIL_EXIST(201, "邮箱已存在"),
|
||||||
|
REQUEST_IS_EMPTY(201, "请求数据为空"),
|
||||||
|
DATA_TOO_LARGE(201, "请求数据为空"),
|
||||||
|
UPDATE_NEW_PASSWORD_SAME_AS_OLD_PASSWORD(201, "新密码与密码相同"),
|
||||||
|
|
||||||
|
// 数据相关 206
|
||||||
|
ILLEGAL_REQUEST(206, "非法请求"),
|
||||||
|
REPEAT_SUBMIT(206, "重复提交"),
|
||||||
|
DATA_ERROR(206, "数据异常"),
|
||||||
|
EMAIL_USER_TEMPLATE_IS_EMPTY(206, "邮件模板为空"),
|
||||||
|
EMAIL_TEMPLATE_IS_EMPTY(206, "邮件模板为空"),
|
||||||
|
EMAIL_USER_IS_EMPTY(206, "关联邮件用户配置为空"),
|
||||||
|
DATA_EXIST(206, "数据已存在"),
|
||||||
|
DATA_NOT_EXIST(206, "数据不存在"),
|
||||||
|
ALREADY_USER_EXCEPTION(206, "用户已存在"),
|
||||||
|
USER_IS_EMPTY(206, "用户不存在"),
|
||||||
|
FILE_NOT_EXIST(206, "文件不存在"),
|
||||||
|
NEW_PASSWORD_SAME_OLD_PASSWORD(206, "新密码不能和旧密码相同"),
|
||||||
|
MISSING_TEMPLATE_FILES(206, "缺少模板文件"),
|
||||||
|
|
||||||
|
// 身份过期 208
|
||||||
|
LOGIN_AUTH(208, "请先登陆"),
|
||||||
|
AUTHENTICATION_EXPIRED(208, "身份验证过期"),
|
||||||
|
SESSION_EXPIRATION(208, "会话过期"),
|
||||||
|
|
||||||
|
// 209
|
||||||
|
THE_SAME_USER_HAS_LOGGED_IN(209, "相同用户已登录"),
|
||||||
|
|
||||||
|
// 提示错误
|
||||||
|
UPDATE_ERROR(216, "修改失败"),
|
||||||
|
URL_ENCODE_ERROR(216, "URL编码失败"),
|
||||||
|
ILLEGAL_CALLBACK_REQUEST_ERROR(217, "非法回调请求"),
|
||||||
|
FETCH_USERINFO_ERROR(219, "获取用户信息失败"),
|
||||||
|
ILLEGAL_DATA_REQUEST(219, "非法数据请求"),
|
||||||
|
CLASS_NOT_FOUND(219, "类名不存在"),
|
||||||
|
ADMIN_ROLE_CAN_NOT_DELETED(219, "无法删除admin角色"),
|
||||||
|
ROUTER_RANK_NEED_LARGER_THAN_THE_PARENT(219, "设置路由等级需要大于或等于父级的路由等级"),
|
||||||
|
|
||||||
|
// 无权访问 403
|
||||||
|
FAIL_NO_ACCESS_DENIED(403, "无权访问"),
|
||||||
|
FAIL_NO_ACCESS_DENIED_USER_OFFLINE(403, "用户强制下线"),
|
||||||
|
TOKEN_PARSING_FAILED(403, "token解析失败"),
|
||||||
|
FAIL_NO_ACCESS_DENIED_USER_LOCKED(403, "该账户已封禁"),
|
||||||
|
|
||||||
|
// 系统错误 500
|
||||||
|
UNKNOWN_EXCEPTION(500, "服务异常"),
|
||||||
|
SERVICE_ERROR(500, "服务异常"),
|
||||||
|
UPLOAD_ERROR(500, "上传失败"),
|
||||||
|
FAIL(500, "失败"),
|
||||||
|
;
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
private final String message;
|
||||||
|
|
||||||
|
ResultCodeEnum(Integer code, String message) {
|
||||||
|
this.code = code;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
bunny:
|
||||||
|
master:
|
||||||
|
host: rm-bp12z6hlv46vi6g8mro.mysql.rds.aliyuncs.com
|
||||||
|
port: 3306
|
||||||
|
database: bunny_test
|
||||||
|
username: bunny_test
|
||||||
|
password: "Test1234"
|
|
@ -4,7 +4,29 @@ server:
|
||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
name: spring-security
|
name: spring-security
|
||||||
|
profiles:
|
||||||
|
active: dev
|
||||||
|
|
||||||
|
datasource:
|
||||||
|
type: com.zaxxer.hikari.HikariDataSource
|
||||||
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
url: jdbc:mysql://${bunny.master.host}:${bunny.master.port}/${bunny.master.database}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
|
||||||
|
username: ${bunny.master.username}
|
||||||
|
password: ${bunny.master.password}
|
||||||
|
hikari:
|
||||||
|
maximum-pool-size: 20
|
||||||
|
connection-timeout: 30000
|
||||||
|
|
||||||
|
jackson:
|
||||||
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
|
|
||||||
|
mybatis-plus:
|
||||||
|
mapper-locations: classpath:/mapper/*.xml
|
||||||
|
global-config:
|
||||||
|
db-config:
|
||||||
|
id-type: auto
|
||||||
|
logic-delete-value: 1
|
||||||
|
logic-not-delete-value: 0
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<contextName>logback</contextName>
|
||||||
|
|
||||||
|
<!-- 格式化 年-月-日 输出 -->
|
||||||
|
<timestamp key="datetime" datePattern="yyyy-MM-dd"/>
|
||||||
|
<!-- 引入Spring属性 -->
|
||||||
|
<springProperty name="APP_NAME" source="spring.application.name" defaultValue="application"/>
|
||||||
|
|
||||||
|
<!--编码-->
|
||||||
|
<property name="ENCODING" value="UTF-8"/>
|
||||||
|
|
||||||
|
<!-- 控制台日志 -->
|
||||||
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<!-- 临界值过滤器 -->
|
||||||
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||||
|
<level>DEBUG</level>
|
||||||
|
</filter>
|
||||||
|
<encoder>
|
||||||
|
<pattern>
|
||||||
|
%cyan([%thread %d{yyyy-MM-dd HH:mm:ss}]) %yellow(%-5level) %green(%logger{100}).%boldRed(%method)-%boldMagenta(%line)-%blue(%msg%n)
|
||||||
|
</pattern>
|
||||||
|
<charset>${ENCODING}</charset>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- 文件日志 -->
|
||||||
|
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
|
||||||
|
<file>logs/${APP_NAME}/${datetime}.log</file>
|
||||||
|
<append>true</append>
|
||||||
|
<encoder>
|
||||||
|
<pattern>%date{yyyy-MM-dd HH:mm:ss} [%-5level] %thread %file:%line %logger %msg%n</pattern>
|
||||||
|
<charset>${ENCODING}</charset>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- 让SpringBoot内部日志ERROR级别 减少日志输出 -->
|
||||||
|
<logger name="org.springframework" level="ERROR" additivity="false">
|
||||||
|
<appender-ref ref="STOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- 让mybatis整合包日志ERROR 减少日志输出 -->
|
||||||
|
<logger name="org.mybatis" level="ERROR" additivity="false">
|
||||||
|
<appender-ref ref="STOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- 让ibatis 日志ERROR 减少日志输出 -->
|
||||||
|
<logger name="org.apache.ibatis" level="ERROR" additivity="false">
|
||||||
|
<appender-ref ref="STOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- 让 tomcat包打印日志 日志ERROR 减少日志输出 -->
|
||||||
|
<logger name="org.apache" level="ERROR" additivity="false">
|
||||||
|
<appender-ref ref="STOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- 我们自己开发的程序为DEBUG -->
|
||||||
|
<logger name="cn.bunny" level="DEBUG" additivity="false">
|
||||||
|
<appender-ref ref="STOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.baomidou" level="ERROR" additivity="false">
|
||||||
|
<appender-ref ref="STOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- 根日志记录器:INFO级别 -->
|
||||||
|
<root level="DEBUG">
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
<appender-ref ref="FILE"/>
|
||||||
|
</root>
|
||||||
|
|
||||||
|
</configuration>
|
Loading…
Reference in New Issue