JavaFreeCloud2025 快速入门
基于 Spring Boot 3.5.6 + Java 17
使用 JavaFreeCloud2025 框架(v2.0.1)快速搭建企业级微服务应用。
准备工作
1. 环境要求
| 工具 | 版本 | 推荐下载 |
|---|---|---|
| JDK | 17 或以上 | Eclipse Temurin |
| Maven | 3.8+ | Apache Maven |
| IDE | IntelliJ IDEA / Eclipse | IntelliJ IDEA |
| MySQL | 5.7 / 8.0+ | MySQL Community |
| Redis | 5.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.xml2. 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: 864003.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: 305. 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 级别日志 |
核心功能模块
| 模块 | 功能 |
|---|---|
auth | JWT 认证、权限控制、登录拦截 |
cache | Redis + Caffeine 二级缓存 |
accesslog | 请求日志自动记录(JPA / Elasticsearch) |
springdoc | OpenAPI 3 文档生成 |
common | 统一响应、异常处理、工具类 |
常见问题
| 问题 | 解决方案 |
|---|---|
| 依赖下载失败 | 检查 settings.xml 是否正确配置私有仓库 |
启动报 ClassNotFoundException | 安装 Lombok 插件并启用注解处理 |
| Swagger 打不开 | 检查端口是否被占用,或 springdoc.enabled 是否为 true |
| 日志未输出 | 检查 logging.level 配置 |
📚 下一步
- 查看 JavaFreeCloud 完整文档
- 参考示例工程:javafree2025-examples
✅ 你已成功搭建 JavaFreeCloud2025 工程! 现在可以开始开发你的业务功能了。
本指南适用于快速入门。如需高级配置,请参考官方文档。