Skip to content

配置

后端配置

建议

在接触其他项目的过程中,发现大家基本上将系统的所有配置都放到了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
# 代码生成工具
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:9001/
  # 访问密钥
  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。结合NginxApache服务器使用。

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