配置
后端配置
建议
在接触其他项目的过程中,发现大家基本上将系统的所有配置都放到了application.yml中,导致yml非常长且不好维护。因此萌生想法:将yml根据功能进行拆分,便产生了现在这种结构。
配置 | 描述 |
---|---|
/config/${spring.profiles.active}/*.yml | 功能划分的子配置文件。 |
./application.yml | 根配置,子配置的导入。通用配置(建议只放最基础常用的配置)。 |
./application-${spring.profiles.active}.yml | 环境配置,一般配置API前缀或开放端口。 |
配置引用顺序:
./application.yml
-> ./application-${spring.profiles.active}.yml
./application.yml
-> /config/${spring.profiles.active}/*.yml
配置优先级:
./application-${spring.profiles.active}.yml
>= /config/${spring.profiles.active}/*.yml
>= ./application.yml
shell
sz-boot-parent/sz-service/sz-service-admin/src/main/resources/
├── config # 配置路径
│ ├── dev # 开发环境
│ │ ├── flyway.yml # flyway数据库脚本管理配置
│ │ ├── knife4j.yml # swagger文档配置
│ │ ├── minio.yml # minio配置
│ │ ├── mybatis-flex.yml # mybatis-flex配置
│ │ ├── mysql.yml # jdbc配置
│ │ ├── page-helper.yml # page-helper分页配置
│ │ ├── redis.yml # redis配置
│ │ └── sa-token.yml # sa-token配置
│ ├── local # 本地环境
│ │ ├── flyway.yml
│ │ ├── knife4j.yml
│ │ ├── minio.yml
│ │ ├── mybatis-flex.yml
│ │ ├── mysql.yml
│ │ ├── page-helper.yml
│ │ ├── redis.yml
│ │ └── sa-token.yml
│ ├── preview # 预览/测试环境
│ │ ├── flyway.yml
│ │ ├── knife4j.yml
│ │ ├── minio.yml
│ │ ├── mybatis-flex.yml
│ │ ├── mysql.yml
│ │ ├── page-helper.yml
│ │ ├── redis.yml
│ │ └── sa-token.yml
│ └── prod # 正式环境
│ ├── flyway.yml
│ ├── knife4j.yml
│ ├── minio.yml
│ ├── mybatis-flex.yml
│ ├── mysql.yml
│ ├── page-helper.yml
│ ├── redis.yml
│ └── sa-token.yml
│ ...
├── application.yml # 主配置文件
├── application-dev.yml
├── application-local.yml
├── application-preview.yml
├── application-prod.yml
...
配置详解
WARNING
以下配置为示例配置,具体需结合自己情况进行调整。
根配置
application.yml
yaml
spring:
threads:
virtual:
# 启用虚拟线程
enabled: true
profiles:
# 默认启动local环境配置
active: local
config:
# 根据环境变量导入配置
import:
- classpath:config/${spring.profiles.active}/flyway.yml
- classpath:config/${spring.profiles.active}/knife4j.yml
- classpath:config/${spring.profiles.active}/minio.yml
- classpath:config/${spring.profiles.active}/mybatis-flex.yml
- classpath:config/${spring.profiles.active}/mysql.yml
- classpath:config/${spring.profiles.active}/page-helper.yml
- classpath:config/${spring.profiles.active}/redis.yml
- classpath:config/${spring.profiles.active}/sa-token.yml
# 解决springboot2.7后swagger访问报错的问题
mvc:
path-match:
matching-strategy: ant_path_matcher
application:
# 服务名
name: admin-service
# 文件大小限制
servlet:
multipart:
max-file-size: 10MB
max-request-size: 15MB
# -- sz-admin 自定义参数配置 --
sz:
# 是否启用数据权限拼接
data-scope:
enabled: true
# 数据逻辑实现最小验证(查询)单位:dept 部门(dept_scope字段)、user 用户 (create_id 字段),默认user。
logic-min-unit: user
debounce:
# 是否启用防抖功能
enabled: true
# 全局防抖时间,单位毫秒(默认1000ms)
global-lock-time: 500
# 是否忽略GET请求
ignore-get-method: true
# 生成工具
generator:
path:
# 前端项目地址
web:
# 后端项目地址,默认自动检测springboot项目路径,无需配置。
api: E://code//Gitlab//sz-framework//sz-admin
# 模块名,指定代码生成的模块
module-name: sz-service
service-name: sz-service-admin
global:
author: sz-admin
packages: com.sz.admin
# 微信生态
wechat:
# 小程序
mini:
app-id: your_app_id
app-secret: your_app_secret
环境配置
application-dev.yml
yaml
# 服务器配置
server:
# Servlet 配置
servlet:
# 设置上下文路径为 /api/admin
context-path: /api/admin
# 设置端口为 9991
port: 9991
子配置
flyway.yml
yaml
# flyway配置
flyway:
framework: # 框架迁移脚本管理
enabled: true
# 框架迁移脚本路径
locations: classpath:/db/framework
baseline-on-migrate: true
baseline-version: 1
table: t_db_version
validate-on-migrate: true
business: # 业务迁移脚本管理(实际业务发生的数据库变更脚本)
enabled: true
# 业务迁移脚本路径
locations: classpath:db/business
baseline-on-migrate: true
baseline-version: 1
table: t_db_version_business
validate-on-migrate: true
knife4j.yml
yaml
# swagger文档配置
knife4j:
# 是否开启knife4j
enable: true
setting:
language: zh_cn
springdoc:
default-flat-param-object: true
swagger-ui:
# Swagger UI页面路径
path: /swagger-ui.html
# 标签排序方式(按字母顺序)
tags-sorter: alpha
# 操作排序方式(按字母顺序)
operations-sorter: alpha
api-docs:
# Swagger API文档路径
path: /v3/api-docs
# 文档分组配置
group-configs:
# 组名
- group: 'sz-admin'
# 匹配路径
paths-to-match: '/**'
# 扫描的包
packages-to-scan: com.sz.admin
- group: 'generator工具'
paths-to-match: '/**'
packages-to-scan: com.sz.generator
- group: 'www网站'
paths-to-match: '/**'
packages-to-scan: com.sz.www
- group: '微信小程序'
paths-to-match: '/**'
packages-to-scan: com.sz.applet
minio.yml
yaml
# minio配置
minio:
# MinIO服务端点地址
endpoint: http://192.168.56.101:9000/
# 访问密钥
access-key: NhQlOFYcyXiQm40DpW56
# 秘密密钥
secret-key: O1q6YRp79cTeNrtHT8yHXgcFWcOTDJNpKpRsYMzp
# 存储桶名称
bucket-name: sz-boot-parent-local
mybatis-flex.yml
yaml
# mybatis-flex配置
mybatis-flex:
# MyBatis配置
configuration:
# 将数据库字段的下划线命名转换为驼峰命名
map-underscore-to-camel-case: true
# 对null值进行jdbc类型处理
jdbc-type-for-null: null
# 自动映射行为(完全映射)
auto-mapping-behavior: full
# 未知列的自动映射行为(不映射)
auto-mapping-unknown-column-behavior: none
# 是否启用缓存
cache-enabled: false
# 全局配置
global-config:
# 逻辑删除字段的已删除值
deleted-value-of-logic-delete: "T"
# 逻辑删除字段的未删除值
normal-value-of-logic-delete: "F"
mysql.yml
yaml
# mysql配置
spring:
datasource:
# 驱动
driver-class-name: com.mysql.cj.jdbc.Driver
# jdbc
url: jdbc:mysql://127.0.0.1:3306/sz_admin_preview?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: Yanfa2023@
hikari:
#连接池名
pool-name: HikariCP
#最小空闲连接数
minimum-idle: 5
# 空闲连接存活最大时间,默认10分钟
idle-timeout: 600000
# 连接池最大连接数,默认是10
maximum-pool-size: 10
# 此属性控制从池返回的连接的默认自动提交行为,默认值:true
auto-commit: true
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
max-lifetime: 1800000
# 数据库连接超时时间,默认30秒
connection-timeout: 30000
# 连接测试query
connection-test-query: SELECT 1
page-helper.yml
yaml
# pagehelper配置
page-helper:
# 分页插件方言类型(MySQL)
helperDialect: mysql
# 是否启用分页合理化
reasonable: false
# 是否支持方法参数(支持)
supportMethodsArguments: true
# 分页参数设置
params: count=countSql
redis.yml
yaml
# redis
spring:
data:
redis:
#单机配置
host: 127.0.0.1
port: 6379
# 数据索引
database: 0
# 连接超时时间(毫秒)
timeout: 50000
###连接池配置###
jedis:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 100
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 30
# 连接池中的最小空闲连接
min-idle: 10
password: 123456
# 开启redis监听 (自定义配置)
redis:
listener:
enable: true
sa-token.yml
yaml
# sa-token
sa-token:
# token名称 (同时也是cookie名称)
token-name: Authorization
# 是否开启自动续签
auto-renew: true
# token固定超时 设为七天 (必定过期) 单位: 秒
timeout: 604800 # 全局变量,最终时间在【客户端管理】中进行设置
# 多端不同 token 有效期 可查看 LoginHelper.loginByDevice 方法自定义
# token最低活跃时间 (指定时间无操作就过期) 单位: 秒
active-timeout: 86400 # 全局变量,最终时间在【客户端管理】中进行设置
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
token-style: uuid
# 是否输出操作日志
is-log: true
# jwt秘钥
jwt-secret-key: abcdefghijklmnopqrstuvwxyz # 修改成自己的秘钥串,不要使用默认秘钥!!!
# 允许动态设置 token 有效期
dynamic-active-timeout: true
# 允许从 请求参数 读取 token
is-read-body: false
# 允许从 header 读取 token
is-read-header: true
# 关闭 cookie 鉴权 从根源杜绝 csrf 漏洞风险
is-read-cookie: false
# token前缀
token-prefix: "Bearer"
# 同一账号最大登录数量,-1代表不限
max-login-count: -1 # 默认同一账号最大登录数量=12
# 接口白名单(放行接口-不鉴权)
router:
whitelist:
- "/v3/api-docs/**"
- "/auth/login"
- "/register"
- "/sys-dict/dict"
- "/doc.html"
- "/webjars/**"
- "/swagger-resources"
- "/favicon.ico"
- "/common/**"
- "/swagger-ui.html"
- "/www/**"
- "/wechat/**"
前端配置
前端配置相对比较简单,这里我只对 .env.development.local
和 .env.prod
进行描述。
IMPORTANT
需要注意的是VITE_APP_CLIENT_ID
配置,它是【客户端管理】颁发的可用ID。建议针对不同环境颁发不同的ID。
.env.development.local
用于本地开发调试的环境
properties
# 本地环境
VITE_USER_NODE_ENV=development
# 公共基础路径
VITE_PUBLIC_PATH=/
# 开发环境接口地址
VITE_API_URL=http://127.0.0.1:9991/api
# 开发环境websocket服务地址。若不填写此地址,WebSocket(客户端)服务将不会启动
VITE_SOCKET_URL="ws://127.0.0.1:9993/socket"
# 授权的clientID
VITE_APP_CLIENT_ID ="195da9fcce574852b850068771cde034"
.env.production
用于线上发布的环境,build 生成dist。结合Nginx或Apache服务器使用。
properties
# 线上环境
VITE_USER_NODE_ENV=production
# 公共基础路径
VITE_PUBLIC_PATH=/
# 是否启用 gzip 或 brotli 压缩打包,如果需要多个压缩规则,可以使用 “,” 分隔
# Optional: gzip | brotli | none
VITE_BUILD_COMPRESS=none
# 打包压缩后是否删除源文件
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE=false
# 线上环境接口地址
VITE_API_URL="/api"
VITE_APP_CLIENT_ID ="195da9fcce574852b850068771cde034"
# websocket服务地址。若不填写此地址,WebSocket(客户端)服务将不会启动。请使用ws://协议头进行非加密通信,或使用wss://协议头进行加密通信,以确保数据传输的安全
VITE_SOCKET_URL="wss://your.domain.com/socket"
# 是否对admin用户放行前端按钮权限验证,默认放行
VITE_ADMIN_BYPASS_PERMISSION=true
.env
通用配置
properties
# title
VITE_APP_TITLE='Sz Admin'
# (本地)运行端口号
VITE_PORT=9848
# (本地)启动时自动打开浏览器
VITE_OPEN=true
# clientId
VITE_APP_CLIENT_ID ="195da9fcce574852b850068771cde034"
# HTTP请求最大超时时间(ms)120s
VITE_APP_HTTP_TIMEOUT=120000