如何新建项目 例如新建电商服务
1. 新建一个模块,如 yipeng-shopping

2. 在 yipeng-shopping 的 pom.xml 文件中添加以下依赖即可
xml
<dependencies>
<!--核心包-->
<dependency>
<groupId>com.yipeng.framework</groupId>
<artifactId>framework-core</artifactId>
</dependency>
<!--权限校验-->
<dependency>
<groupId>com.yipeng.framework</groupId>
<artifactId>framework-security</artifactId>
</dependency>
</dependencies>
<!--打包配置-->
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>3. 在项目启动类上添加以下注解内容即可
java
package com.kp.framework;
import com.kp.framework.utils.kptool.KPIconUtil;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import java.util.Arrays;
@SpringBootApplication
@MapperScan({"com.**.modules.*.mapper", "com.**.mapper"})
@EnableConfigurationProperties
@EnableAsync
@EnableScheduling
public class ShoppingApplication {
public static void main(String[] args) {
SpringApplication.run(ShoppingApplication.class, args);
KPIconUtil.ok(KPIconUtil.GREEN);
String[] details = {
"本地接口地址:http://127.0.0.1:9001/doc.html",
"本地Druid地址:http://127.0.0.1:9001/druid/index.html",
"正式接口地址:http://kpopen.cn/doc.html",
"正式前端地址:http://kpopen.cn/front",
"测试接口地址:http://kpopen.cn/doc.html",
"测试前端地址:http://kpopen.cn/front"
};
KPIconUtil.println(KPIconUtil.YELLOW, Arrays.asList(details), false);
}
}4. 在`resources` 目录下新建 `application.yml` 和 `logback-spring.xml` 配置文件,并添加以下内容
application.yml
env: dev
server:
port: 9001
spring:
application:
name: authentication
servlet:
# 应用的访问路径
context-path: /
multipart:
enabled: true # 开启文件上传
max-file-size: 100MB # 单个文件最大大小(根据你的业务调整,比如500MB)
max-request-size: 100MB # 单次请求最大大小(需大于等于max-file-size)
file-size-threshold: 5MB # 超过该大小的文件会写入磁盘,否则在内存
location: /data/file # 临时文件存储目录
devtools:
restart:
enabled: true # 启用开发工具自动重启功能,代码变更时自动重启应用(开发阶段使用)
datasource:
type: com.zaxxer.hikari.HikariDataSource
dynamic:
primary: yipeng_auth
strict: true
datasource:
yipeng_auth:
url: jdbc:mysql://127.0.0.1:3306/yipeng_auth_dev?useUnicode=true&autoReconnect=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&zeroDateTimeBehavior=CONVERT_TO_NULL
username: username
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maxPoolSize: 20
minIdle: 10
data:
redis:
host: 127.0.0.1 # Redis服务器地址
port: 6379 # Redis服务器连接端口
password: password # Redis服务器连接密码(默认为空)
database: 0 # Redis数据库索引(默认为0)
timeout: 60s # 连接空闲超过N(s秒、ms毫秒,不加单位时使用毫秒)后关闭,0为禁用,这里配置值和tcp-keepalive值一致
lettuce: # Lettuce连接池配置
pool:
max-active: 10 # 允许最大连接数,默认8(负值表示没有限制),推荐值:大于cpu * 2,通常为(cpu * 2) + 2 Lettuce 是多路复用(single connection, async),不像 Jedis 那样每个操作占一个连接。 通常 1~2 个物理连接就能支撑高并发
max-idle: 8 # 最大空闲连接数,默认8,推荐值:cpu * 2
min-idle: 2 # 最小空闲连接数,默认0
max-wait: 5s # 连接用完时,新的请求等待时间(s秒、ms毫秒),超过该时间抛出异常,默认-1(负值表示没有限制)
cache:
type: redis # 指定缓存用Redis,开启缓存注解核心开关
flyway:
enabled: true # 是否开启 Flyway
encoding: UTF-8 # 设置数据库编码格式
locations: classpath:db # 设置 Flyway 的 SQL 文件位置
baseline-on-migrate: true # 关键:Spring Boot 3.x 要求连字符命名
sql-migration-prefix: V # 关键:连字符命名
sql-migration-separator: _ # 关键:连字符命名
sql-migration-suffixes: sql # 关键:连字符命名
validate-on-migrate: true # 关键:连字符命名
fail-on-missing-locations: false #当 Flyway 找不到配置的脚本目录时,是否终止启动并报错 false 表示「不报错,忽略这个问题」
clean-disabled: true #是否禁用 Flyway 的 clean 命令 true 表示禁用,不允许执行 clean 操作
mybatis-plus:
mapper-locations: classpath:/mapper/**/*Mapper.xml,classpath:/mapper/**/custom/*CustomMapper.xml
typeAliasesPackage: com.kp.framework.**.po,com.kp.framework.**.po.custom,com.kp.framework.**.po.param
global-config:
db-config:
id-type: auto # 主键生成策略(数据库自增)
logic-delete-value: -1 # 逻辑删除标记值(-1表示已删除)
logic-not-delete-value: 0 # 逻辑未删除标记值(0表示未删除)
banner: false # 关闭启动时的MyBatis-Plus横幅
enable-sql-runner: true # 启用SQL执行器(打印SQL日志)
configuration:
map-underscore-to-camel-case: true # 启用驼峰命名映射(数据库下划线转Java驼峰)
cache-enabled: true # 启用二级缓存
call-setters-on-nulls: true # 允许NULL值设置字段
jdbc-type-for-null: 'null' # JDBC中NULL值类型
# ===================== SpringDoc 核心配置(适配 OpenAPI 3.0) =====================
springdoc:
default-consumes-media-type: application/json
default-produces-media-type: application/json
swagger-ui: # Swagger UI 前端页面配置
path: /swagger-ui.html # 自定义 Swagger UI 访问路径(默认是 /swagger-ui/index.html,这里改为更常用的 /swagger-ui.html)
# tags-sorter: alpha # 标签(Tag)排序规则:alpha 按字母序排序(可选:alpha/order,order 按定义顺序)
operations-sorter: order # 接口(Operation)排序规则:注释掉表示使用默认(alpha),开启 order 则按 @Operation(operationId) 或定义顺序
api-docs: # OpenAPI 接口文档的 JSON 数据接口配置(供前端 UI 渲染使用)
enabled: true
path: /v3/api-docs # 自定义 API 文档 JSON 数据的访问路径(默认 /v3/api-docs)
info:
title: 易鹏框架实体模块 # 文档标题(界面顶部显示)
description: "易鹏微服务框架官方接口文档,提供用户、权限、资源等核心模块的接口定义" # 文档简介(界面“简介”区域)
version: v1.0.0 # 文档版本(界面“版本”区域)
contact: # 作者/联系方式(界面“作者”区域)
name: 李鹏
email: 920297199@qq.com
url: http://kpopen.cn/author
termsOfService: http://kpopen.cn/terms # API服务条款(界面“API服务条款”区域)
# group-configs: # 接口文档分组配置(支持多模块/多版本分组)
# - group: 'default' # 分组名称(默认分组,可自定义如:user、order)
# #display-name: '分组名称' # 分组显示名称(注释掉则使用 group 名)
# paths-to-match: '/**' # 匹配所有路径的接口(
# packages-to-scan: com.kp.framework # 扫描指定包下的接口
default-flat-param-object: true # 扁平化参数对象:true 表示将嵌套的 POJO 参数展平为单个参数列表(前端显示更友好)
# ===================== Knife4j 增强配置(基于 SpringDoc 扩展) =====================
knife4j: # 其他配置 参考 https://doc.xiaominfo.com/docs/features/enhance
enable: true # 开启 Knife4j 增强功能
production: false # 生产环境屏蔽配置:开启 production: true 则禁止访问文档(防止泄露接口信息)
basic: # Knife4j 基础认证配置
enable: false # 是否开启基础认证
username: username # 认证用户名(开启 basic.enable 后生效)
password: password # 认证密码(开启 basic.enable 后生效)
setting: # Knife4j 界面自定义配置
language: zh_cn # 界面语言:zh_cn 中文(默认),en 英文
enable-version: true # 是否显示接口版本号:true 显示(需接口上配置 @Operation(version = "1.0"))
enable-swagger-models: false # 是否显示 Swagger 模型(实体类):true 显示,false 隐藏
swagger-model-name: 易鹏框架实体模块 # Swagger 模型的分组名称(前端显示的实体类模块名)
enable-reload-cache-parameter: true #是否在每个Debug调试栏后显示刷新变量按钮,默认不显示
enable-footer-custom: true #是否开启自定义Footer
footer-custom-content: "易鹏微服务框架官方接口文档 官网地址:http://kpopen.cn/"
enable-group: true # 开启分组排序支持
pagehelper:
auto-dialect: true # 自动检测数据库方言
auto-runtime-dialect: true # 运行时自动检测数据库方言
params: count=countSql # 分页参数配置(计数SQL参数)
kp:
token:
header: Authorization # JWT令牌请求头名称
secret: abcdefghijklmnopqrstuvwxyz # JWT签名密钥
expireTime: 36000 # 令牌过期时间(秒)默认 1800 30分钟
head: Bearer # 令牌类型前缀(如Bearer Token) 默认 Bearer
multiAccess: false # 是否允许同一账号多人登录 默认false
user:
error-number: 5 #登录失败最大锁定次数 默认 5
lock-time: 1440 #锁定时间 单位 分 默认 24小时
default-password: 123456 # 默认用户密码 默认 123456
minio:
url: http://127.0.0.1:9000
user-name: minio
password: password
log:
interface-log: true
http-log: true
interface-consume-num: 100 #接口记录日志 消费条数(每次读取队列多少条) 默认 100
http-consume-num: 5 # http记录日志 消费条数(每次读取队列多少条) 默认 30
interface-Archive-Day: 30 #接口记录日志归档天数 多少天以前的归档
http-Archive-Day: 60 #http记录日志归档天数 多少天以前的归档
project-name: 鉴权项目 # 项目名称
green-channel-login: # 可以进行免密登录的项目编号
- authentication
logging:
level:
com.kp.framework.modules: DEBUGlogback-spring.xml
<?xml version="1.0" encoding="utf-8" ?>
<!-- 核心修正:指定Spring Boot的Configurator,支持springProperty -->
<configuration scan="true" scanPeriod="30 seconds" contextName="daoben-framework">
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<!-- 文件存储地址 读取application.yml中的log.path配置 -->
<springProperty name="logPath" scope="context" source="log.path" defaultValue="./logs"/>
<!-- 自动创建history子目录(解决目录不存在问题) -->
<property name="archivePath" value="${logPath}/history"/>
<!-- 统一日志格式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - %msg%n"/>
<property name="LOG_CHARSET" value="UTF-8"/>
<!-- 开发打印控制台日志 -->
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!-- 1. 全部日志 Appender(核心修正:additivity=false 避免重复) -->
<appender name="all" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 多进程安全写入 -->
<prudent>false</prudent>
<File>${logPath}/all.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${archivePath}/all-%d{yyyyMMdd}.%i.log</fileNamePattern>
<!-- 修正:保留60天(原180天) -->
<maxHistory>60</maxHistory>
<maxFileSize>30MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
<!-- 自动创建归档目录 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
<charset>${LOG_CHARSET}</charset>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="all"/>
</root>
<!-- 2. HTTP请求日志 Appender(核心修正:additivity=false) -->
<appender name="okHttp" class="ch.qos.logback.core.rolling.RollingFileAppender">
<prudent>false</prudent>
<File>${logPath}/http.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${archivePath}/http-%d{yyyyMMdd}.%i.log</fileNamePattern>
<maxHistory>60</maxHistory>
<maxFileSize>30MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
<charset>${LOG_CHARSET}</charset>
</encoder>
</appender>
<logger name="com.kp.framework.utils.kptool.KPOkHttpHelperUtil" level="info" additivity="true">
<appender-ref ref="okHttp"/>
</logger>
</configuration>