Skip to content

JavaFreeCloud2025 快速入门

基于 Spring Boot 3.5.6 + Java 17

使用 JavaFreeCloud2025 框架(v2.0.1)快速搭建企业级微服务应用。

代码参见:https://gitee.com/javafree-cloud/javafree2025-examples

准备工作

1. 环境要求

工具版本推荐下载
JDK17 或以上Eclipse Temurin
Maven3.8+Apache Maven
IDEIntelliJ IDEA / EclipseIntelliJ IDEA
MySQL5.7 / 8.0+MySQL Community
Redis5.0+Windows版 5.0.14.1

✅ 建议使用 JDK 17+ 和 Maven 3.8+,确保兼容性。

配置 Maven(关键)

JavaFreeCloud 使用私有 Maven 仓库,需配置 settings.xml

1. 文件路径

bash
# 全局配置(推荐)
{MAVEN_HOME}/conf/settings.xml

# 用户配置
{USER_HOME}/.m2/settings.xml

⚠️ 修改前建议备份原文件。

2. 配置内容(关键片段)

将以下配置合并到你的 settings.xml 中:

xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <!-- 本地仓库 -->
  <localRepository>E:/tools/apache-maven-repository</localRepository>

  <!-- ============ 镜像配置 ============ -->
  <mirrors>
    <!-- 将阿里云作为 central 的镜像(自动代理中央仓库) -->
    <mirror>
      <id>aliyun-central</id>
      <!-- 排除私有仓库,确保它们不被镜像 -->
      <mirrorOf>central,!2602177-release-16ys0R,!2602177-snapshot-tixmOn</mirrorOf>
      <name>Aliyun Central Mirror</name>
      <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
  </mirrors>

  <!-- ============ 服务器认证(私有仓库只读下载传用) ============ -->
 <servers>
    <server>
      <id>2602177-release-16ys0R</id>
      <username>68ecafb91a2f30e9eb4f0a45</username>
      <password>4M3ESLdeE3(D</password>
    </server>
    <!-- 如果有 snapshot 仓库也需要上传,可添加-->
    <server>
      <id>2602177-snapshot-tixmOn</id>
      <username>68ecafb91a2f30e9eb4f0a45</username>
      <password>4M3ESLdeE3(D</password>
    </server>
  </servers> 

  <!-- ============ 构建配置 ============ -->
  <profiles>
    <profile>
      <id>javafree-public</id>
 

      <!-- 仓库列表 -->
      <repositories>
        <!-- 1. 私有仓库(仅 releases) -->
        <repository>
          <id>2602177-release-16ys0R</id>
          <url>https://packages.aliyun.com/68ecb026ccf3499544d8ade3/maven/2602177-release-16ys0r</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>

        <!-- 2. 私有快照仓库(如有) -->
        <repository>
          <id>2602177-snapshot-tixmOn</id>
          <url>https://packages.aliyun.com/68ecb026ccf3499544d8ade3/maven/2602177-snapshot-tixmon</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>

        <!-- 3. 中央仓库(由阿里云镜像代理,这里仅声明) -->
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>

      <!-- 插件仓库(同上) -->
      <pluginRepositories>
        <pluginRepository>
          <id>2602177-release-16ys0R</id>
          <url>https://packages.aliyun.com/68ecb026ccf3499544d8ade3/maven/2602177-release-16ys0r</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </pluginRepository>
        <pluginRepository>
          <id>2602177-snapshot-tixmOn</id>
          <url>https://packages.aliyun.com/68ecb026ccf3499544d8ade3/maven/2602177-snapshot-tixmon</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </pluginRepository>
        <pluginRepository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

  <!-- 激活 profile -->
  <activeProfiles>
    <activeProfile>javafree-public</activeProfile>
  </activeProfiles>

</settings>

✅ 重点说明:

  • mirrorOf 中排除私有仓库 ID,避免镜像覆盖。
  • server 提供私有仓库认证。
  • activeProfiles 确保配置生效。

创建工程

1. 项目结构

bash
javafree-springboot-demo/
├── src/
   └── main/
       ├── java/
   └── com/example/MyApplication.java
       └── resources/
           ├── application.yml
           ├── mysql.yml
           ├── jwt.yml
           ├── cache.yml
           ├── accesslog.yml
           └── springdoc.yml
├── pom.xml

2. pom.xml 配置

xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>my-javafree-app</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring-boot.version>3.5.6</spring-boot.version>
    <javafree.cloud.version>2.0.1</javafree.cloud.version>
  </properties>

  <!-- 依赖管理 -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>cn.javafree.cloud</groupId>
        <artifactId>javafree-cloud-dependencies</artifactId>
        <version>${javafree.cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <!-- 核心 Starter -->
    <dependency>
      <groupId>cn.javafree.springboot</groupId>
      <artifactId>javafree-spring-boot-starter</artifactId>
    </dependency>

    <!-- Lombok(简化代码) -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <!-- 构建插件 -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>${spring-boot.version}</version>
      </plugin>
    </plugins>
  </build>
</project>

✅ 说明:

  • 使用 BOM 管理版本,避免冲突。
  • 引入 javafree-spring-boot-starter 即获得全套功能。

3. 主启动类

java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

4. 配置文件

application.yml

yaml
server:
  port: 8090

spring:
  application:
    name: javafree-cloud-demo
  config:
    import:
      - classpath:mysql.yml
      - classpath:jwt.yml
      - classpath:cache.yml
      - classpath:accesslog.yml
      - classpath:springdoc.yml
      
   # 文件上传配置
  servlet:
    multipart:
      max-file-size: 512MB
      max-request-size: 512MB
      enabled: true
      file-size-threshold: 0

logging:
  level:
    ROOT: INFO
    cn.javafree.cloud: INFO
  file:
    name: javafree-springboot-demo.log

debug: false

说明:通过 import 机制引入多个 YAML 配置文件,实现配置分离。

文件说明:

文件用途
mysql.yml数据库连接配置(如 Druid、JPA、MyBatis)
jwt.ymlJWT 认证相关配置(密钥、过期时间等)
cache.yml缓存配置(如 Redis、Caffeine)
accesslog.yml访问日志记录配置(如拦截器、日志格式)
springdoc.ymlAPI 文档配置(集成 SpringDoc OpenAPI,替代 Swagger)

⚠️ 注意:这些文件需放在 src/main/resources 目录下。

其他配置文件

1. mysql.yml
yaml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/javafree2025-public?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5 #初始连接数
      max-active: 10 #最大活动连接
      max-wait: 60000 #从池中取连接(没有闲置连接)的最大等待时间,-1表示无限等待
      min-idle: 5 #最小闲置数,小于min-idle连接池会主动创建新的连接
      time-between-eviction-runs-millis: 60000 #清理线程启动的间隔时间,当线程池中没有可用的连接启动清理线程
      min-evictable-idle-time-millis: 300000 #清理线程保持闲置最小时间
      validation-query: SELECT 1  #用于校验连接
      test-on-borrow: false #请求连接时是否校验,比较消耗性能,一般设置false
      test-on-return: false #归还连接时是否校验,比较消耗性能,一般设置false
      test-while-idle: true #清理线程通过validation-query来校验连接是否正常,如果不正常将从连接池中移除
      pool-prepared-statements: true #存储相同逻辑的sql到连接池的缓存中
      #      filters: stat,wall #监控统计web的statement(sql),以及防sql注入的wall
      # 关闭如上配置,可以采用自定义的filter
      filter:
        stat:
          enabled: true #状态监控-->stat
          db-type: mysql
          log-slow-sql: true  #记录超过指定时间的sql到日志中
          slow-sql-millis: 2000
        wall:
          enabled: true #防火墙-->wall
          db-type: mysql
          config:
            delete-allow: true #false禁止删除
            drop-table-allow: false #禁止删除表
            case-condition-const-allow: true #解决1=1报错
      web-stat-filter:
        enabled: true #开启监控uri,默认false
        url-pattern: /* #添加过滤规则
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid" #忽略过滤
      stat-view-servlet:
        enabled: true #开启视图管理界面,默认false
        url-pattern: /druid/* #视图管理界面uri
        login-username: druid #账号
        login-password: 123456 #密码
  #        allow: 127.0.0.1 白名单
  #        deny:  192.168.1.130黑名单
  jpa:
    show-sql: true # 默认false,在日志里显示执行的sql语句
    hibernate:
      ddl-auto: none #指定为update,每次启动项目检测表结构有变化的时候会新增字段,表不存在时会新建,如果指定create,则每次启动项目都会清空数据并删除表,再新建,生产环境none
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

    open-in-view: off  #尽快释放数据库连接资源,不支持jpa的懒加载
  aop:
    proxy-target-class: true  # 启用 CGLIB 代理,避免 LoadTimeWeaver 警告
2. jwt.yml
yaml
#登录日志保存时间及清理周期
loginlog:
  retention-days: 10   # 默认保存30天
  #cleanup-cron: 0 0 2 * * ?   # 默认每天凌晨 2 点执行
  cleanup-cron: "0 0/30 * * * ?" # 每30分钟执行,用于测试

#spring security jwt相关配置
jwt:
  #private.key: /opt/certs/app.key #本地文件路径方式
  private.key: classpath:app.key # 配置私钥 两个密钥文件通过 RsaKeyGenerator工具类生成
  #public.key: /opt/certs/app.pub #本地文件路径方式
  public.key: classpath:app.pub # 配置公钥
  private.key.password: "javafree-cloud-rsa-password"  # 配置私钥文件生成时的密码
  token.url: /auth/token # 登录接口,默认是/login,登录成功后返回token,此url需要加入白名单中
  refresh.token.url: /auth/refresh_token # 刷新token接口,默认是/auth/refresh_token,刷新token成功后返回token,此url需要加入白名单中
  refresh.token.parameter.name: refresh_token # 刷新token请求参数名,默认为refreshToken
  security:
    # 白名单配置
    white_urls:
      - /
      - /login
      - /auth/token
      - /auth/refresh_token
      - /jwtlogin
      - /auth/logout
      - /resource/*
      - /static/**
      - /assets/**          #  Vue 打包后资源目录
      - /register/**
      - /v3/api-docs/**
      - /api-ui.html
      - /swagger-ui/**
      - /swagger-ui.html
      - /druid/**
      - /actuator/**
      - /webjars/**
      - /**.html           #放行所有 .html 文件
      - /**.js
      - /**.svg
      - /**.css
      - /**.png
      - /**.ico
      - /viewimages/**
      - /avatar_img/**
      - /error
      - /favicon.ico      

    token:
      # JWT 在 HTTP HEADER 中默认的 KEY 默认Authorization,集成公司的jwt平台后,
      # 不要用Authorization名,也不能用驼峰,前端会自动改成首字母大写
      token_name: Javafreeauthorization
      # JWT 内容的开头字符 默认 "Bearer "(后面加了空格)
      token_head: "Bearer "
      #JWT 标准信息:签发人 - iss
      issuer: javafree-cloud
      #JWT 标准信息:过期时间 单位秒- exp,未来多长时间内过期 2小时(60*60*2=7200)
      expiration: 7200
      #JWT 标准信息:刷新token过期时间 单位秒- exp,未来多长时间内过期 1天(60*60*24=86400)
      refresh_expiration: 86400
3.cache.yml
yaml
spring:

  # redis 单机配置示例
  data:
    redis:
      host: 127.0.0.1          # Redis服务器地址(生产环境建议集群配置)
      port: 6379               # Redis服务端口
      password: 123456         # 访问密码(重要!生产环境必须配置)
      timeout: 2200ms          # 连接超时时间(建议 1~3 秒)
      lettuce:
        pool:
          max-active: 8      # 连接池最大连接数(根据 QPS 调整,建议值 = QPS*平均响应时间(秒) )
          max-idle: 4         # 最大空闲连接数(建议 max-active 的 5%~10%)
          min-idle: 1          # 最小空闲连接数(生产环境建议 >=5)
          max-wait: 5000ms     # 获取连接最大等待时间(网络不稳定时可适当增加)

  # redis 集群配置示例
  #  data:
  #    redis:
  #      ssl:
  #        enabled: false
  #      password: redis123456 # 集群密码(所有节点需相同)
  #      cluster:
  #        nodes: 10.10.8.170:5001, 10.10.8.170:5002,10.10.8.172:5001,10.10.8.172:5002
  #        max-redirects: 3 # 最大重定向次数(根据集群规模调整)
  #        timeout: 2000ms # 适当增加超时时间(因集群网络开销)
  #
  #      lettuce:
  #        pool:
  #          max-active: 8      # 连接池最大连接数(根据 QPS 调整,建议值 = QPS*平均响应时间(秒) )
  #          max-idle: 4         # 最大空闲连接数(建议 max-active 的 5%~10%)
  #          min-idle: 2          # 最小空闲连接数(生产环境建议 >=5)
  #          max-wait: 5000ms     # 获取连接最大等待时间(网络不稳定时可适当增加)
  #        cluster:
  #          refresh:
  #            adaptive: true #集群拓扑动态感应刷新,自适应拓扑刷新是否所有节点可用,默认是false
  #            period: 2000 #每2秒刷新一次

  # 缓存全局配置
  cache:
    type: redis                # 使用 Redis 作为缓存实现

    # 多级缓存配置(Caffeine + Redis)
    multilevel:
      enable-redis: true # 默认关闭 Redis 相关功能,如果redis服务无法连接,会导致项目无法启动,此时可改为false (生产环境建议开启)
      time-to-live: 30m         # Redis 缓存默认存活时间(生产环境建议 30m~4h)
      use-key-prefix: true     # 启用缓存键前缀(必须与 key-prefix 配合使用)
      key-prefix: "JAVAFREENEWCACHEKEY:DEV"  # 统一前缀(建议格式:项目名:环境)
      topic: "cache:multilevel:topic"  # 缓存同步消息主题(集群环境必须唯一)
      allow-null-values: true  # 是否允许缓存空值(防穿透,建议保持 true)

      # 本地缓存配置(Caffeine)
      local:
        max-size: 2000         # 本地缓存最大条目数(建议内存的 0.1%~1%)
        initial-capacity: 1000 # 初始哈希表容量(建议 max-size 的 50%)
        # 过期策略(三选一)
        expire-mode: RANDOM    # 过期模式:RANDOM(推荐)/WRITE/ACCESS
        expire-after-access: 1800s  # ACCESS模式:最后访问后30分钟过期
        expire-after-write: 1800s   # WRITE模式:写入后30分钟过期
        expiry-jitter: 50      # RANDOM模式:±50% 时间偏差(防雪崩)

      # 熔断器配置(Resilience4j)
      circuit-breaker:
        failure-rate-threshold: 35         # 从25%提升至35%,避免短暂网络抖动触发熔断
        slow-call-rate-threshold: 30       # 从25%提升至30%,允许更多慢调用
        slow-call-duration-threshold: 500ms # 从250ms调整为500ms(需参考Redis实际P99延迟)
        sliding-window-type: time_based     # 改为时间窗口(更适合突发流量)
        permitted-number-of-calls-in-half-open-state: 30  # 增加探测请求量
        max-wait-duration-in-half-open-state: 10s          # 延长半开状态窗口
        sliding-window-size: 60            # 60秒时间窗口(原count_based 40太小)
        minimum-number-of-calls: 50        # 最小统计样本从10提升至50
        wait-duration-in-open-state: 30s   # 熔断持续时间从2.5s调整为30秒(需结合业务容忍度)

        # 新增监控配置
        register-health-indicator: true    # 启用健康检查端点
        event-consumer-buffer-size: 50     # 事件缓冲区大小
4. accesslog.yml
yaml
# accesslog插件配置
spring:
  #日志elasticsearch 配置
  elasticsearch:
    rest:
      # Elasticsearch的地址,可以是集群多个节点,逗号分隔
      uris: http://localhost:9200
      # 如果启用了安全认证(如 X-Pack),填写用户名和密码
      # username: "" # 如果你的Elasticsearch需要认证,请填写用户名
      # password: "" # 相应的密码
      # 连接超时时间(单位:秒)
      connect-timeout: 10
      # 套接字超时时间(单位:秒)
      socket-timeout: 30
      # 最大重试超时时间(单位:秒)
      max-retry-timeout: 60

# 禁用 Elasticsearch 健康检查,避免日志使用顾时,健康检查失败
management:
  health:
    elasticsearch:
      enabled: false

# 操作日志配置
accesslog:
  enabled:  true # 是否开启日志存储 true or  false
  storage: jpa # 可选 jpa 或 elasticsearch
  retention-minutes: 1440 # 日志保留多少分钟 默认 24 小时
  cleanup-enabled: true
  #cleanup-cron: "0 0 1 * * ?" # 默认每天凌晨 1 点执行
  #cleanup-cron: "0 0/30 * * * ?" # 每30分钟执行
  cleanup-cron: "0 0 */2 * * ?" # 每2小时执行

  cache-request-body: true # 是否保存请求体, 为了控制是否记录请求体 默认为 false
  max-body-size: 1048576 # 超过这个值的字节数请求体,不缓存,默认 1M(1024*1024)

   # 日志保存异步线程池配置
  thread-pool:
    core-size: 4
    max-size: 8
    queue-capacity: 1000
    keep-alive-seconds: 60
    thread-name-prefix: AccessLog-Async-
    await-termination-seconds: 30
5. springdoc.yml
yaml
# SpringDoc OpenAPI 配置(Spring Boot 3+ 推荐方式)
springdoc:
  # 启用 Swagger UI
  swagger-ui:
    # UI 访问路径,默认是 /swagger-ui.html
    path: /swagger-ui.html 
    # 启用 UI
    enabled: true  
    # 是否显示 API 分组选择框
    tags-sorter: alpha
    operations-sorter: method

  # OpenAPI JSON 文档路径,默认 /v3/api-docs
  api-docs:
    path: /v3/api-docs
    enabled: true

  #  扫描包(替代你自定义的 packages-to-scan,除非你有特殊逻辑)
  packages-to-scan: cn.javafree 
  #  排除路径
  paths-to-exclude:
    - /admin/**
    - /internal/**

  # 分组(可选)
  group-configs:
    - group: all
      paths-to-match: /**
      packages-to-scan: cn.javafree

javafree:
  springdoc:
    # 是否启用文档功能(默认 true)
    enabled: true

    # API 标题(显示在 Swagger UI 顶部)
    title: JavaFree Cloud API

    # API 版本号
    version: 2.0.1

    # API 描述信息(支持 Markdown)
    description: 由 javafree-cloud-springdoc生成

    # 许可证信息
    license:
      name: JavaFreeCloud 授权协议
      url: http://www.javafree.cn/license.html

    # 联系人信息
    contact:
      name: JavaFreeCloud 技术支持
      email: gwz126@126.com
      url: http://docs.javafree.cn

    # 服务器地址列表(用于多环境切换)
    servers:
      - url: http://localhost:8090
        description: 开发环境
      - url: https://api.javafree.cn
        description: 生产环境

    # 要扫描的包路径(多个包用逗号或数组)
    packages-to-scan:
      - cn.javafree

    # 分组名称(显示在 Swagger UI 的 Group 下拉框中)
    group: All

    # API 路径匹配规则(支持 Ant 风格)
    paths-to-match:
      - /**

    # 排除的路径(优先级高于 paths-to-match)
    paths-to-exclude:
    # - /admin/**
    # - /internal/**

    # 是否启用 JWT Bearer 安全认证方案
    # 启用后会自动添加 Authorization: Bearer <token> 安全头
    jwt-security: true

    # 自定义扩展字段(添加到 OpenAPI.info 中)
    # 可用于标记平台、团队等元信息
    vendor-extension: JavaFreeCloud

数据库初始化

JavaFreeCloud 支持 JPA 自动建表或手动 SQL 初始化。

1. 创建数据库

sql
CREATE DATABASE javafree_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 初始化方式

✅ 方式一:使用 Flyway(推荐)

xml
<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-core</artifactId>
</dependency>

脚本路径:classpath:db/migration/mysql/V1.0__create_tables.sql

✅ 方式二:手动执行 SQL

从框架的javafree-spring-boot-starter-2.0.1.jar 包中提取 SQL 并执行:

classpath:db/migration/mysql/V1.0__create_tables.sql
classpath:db/migration/mysql/V1.1__insert_data.sql

启动与验证

1. 启动应用

运行 MyApplication.java

2. 验证结果

项目地址预期结果
应用启动控制台输出 Started MyApplication
API 文档http://localhost:8090/swagger-ui.html显示 Swagger UI
日志输出控制台包含 INFO 级别日志

核心功能模块

模块功能
authJWT 认证、权限控制、登录拦截
cacheRedis + Caffeine 二级缓存
accesslog请求日志自动记录(JPA / Elasticsearch)
springdocOpenAPI 3 文档生成
common统一响应、异常处理、工具类

常见问题

问题解决方案
依赖下载失败检查 settings.xml 是否正确配置私有仓库
启动报 ClassNotFoundException安装 Lombok 插件并启用注解处理
Swagger 打不开检查端口是否被占用,或 springdoc.enabled 是否为 true
日志未输出检查 logging.level 配置

📚 下一步


你已成功搭建 JavaFreeCloud2025 工程! 现在可以开始开发你的业务功能了。


本指南适用于快速入门。如需高级配置,请参考官方文档。