本项目是一个 Java/Spring Boot 多模块项目,用于演示各种实用技术和功能实现。
- Java: 1.8
- Spring Boot: 2.1.2.RELEASE
- Gradle: 构建工具
- Lombok: 简化代码
- AspectJ: AOP 面向切面编程
- Hutool: Java 工具类库
.
├── annotation-demo/ # 注解功能演示模块
│ └── src/main/java/com/example/
│ ├── annotation/
│ │ ├── Limit.java # 自定义限流注解
│ │ └── LimitAspect.java # 限流切面实现
│ ├── bean/
│ │ └── LimitType.java # 限流类型枚举
│ ├── svc/
│ │ └── LimitSvc.java # 限流服务示例
│ └── App.java
│
├── async-thread-pool-demo/ # 异步线程池配置演示模块
│ └── src/main/java/com/example/
│ ├── conf/
│ │ ├── AsyncConf.java # 异步配置类 (实现 AsyncConfigurer)
│ │ └── AsyncTaskProperties.java # 线程池配置属性类
│ ├── svc/
│ │ └── AsyncSvc.java # 异步服务示例
│ └── App.java
│
├── build.gradle # 根项目构建配置
└── settings.gradle # Gradle 设置文件
演示如何通过自定义注解 + AOP 切面实现方法级别的限流功能。
核心功能:
@Limit注解:定义限流规则(时间窗口、访问次数、限流类型等)LimitAspect切面:拦截带有@Limit注解的方法,实现限流逻辑- 支持多种限流类型:按 IP、按客户、自定义
使用示例:
@Limit(name = "测试接口", key = "test", period = 60, count = 10)
public void testMethod() {
// 方法逻辑
}演示如何通过 AsyncConfigurer 自定义 Spring 异步任务的线程池参数。
核心功能:
AsyncConf配置类:实现AsyncConfigurer接口,自定义线程池AsyncTaskProperties配置类:从配置文件读取线程池参数- 可配置的线程池参数:
corePoolSize: 核心线程数maxPoolSize: 最大线程数queueCapacity: 队列容量keepAliveSeconds: 线程活跃时间
配置示例 (application.properties):
task.pool.core-pool-size=4
task.pool.max-pool-size=20
task.pool.queue-capacity=4
task.pool.keep-alive-seconds=60使用示例:
@Service
public class AsyncSvc {
@Async
public void asyncMethod() {
// 异步执行的逻辑
}
}- JDK 1.8+
- Gradle
# 编译整个项目
./gradlew build
# 编译指定模块
./gradlew :annotation-demo:build
./gradlew :async-thread-pool-demo:build
# 打 thin 包 (只包含项目代码,不包含依赖)
./gradlew :annotation-demo:jar
./gradlew :async-thread-pool-demo:jar
# 或者生成带 manifest 的 thin jar (可配合 lib 目录运行)
./gradlew :annotation-demo:bootThinJar
./gradlew :async-thread-pool-demo:bootThinJar本项目配置为生成 thin jar(瘦包),而非 fat/uber jar(胖包):
-
Thin Jar: 只包含项目自身的编译代码,不包含第三方依赖
- 优点:文件体积小,部署灵活
- 运行方式:需要额外提供依赖 jar 包(通常放在
lib/目录) - 生成命令:
./gradlew :module-name:jar
-
Fat Jar: 包含项目代码和所有依赖
- 优点:单个文件即可运行
- 缺点:文件体积大
# 1. 先复制依赖到 lib 目录
mkdir -p lib
./gradlew :annotation-demo:dependencies --configuration runtimeClasspath -q | \
grep -o '[^ ]*\.jar$' | xargs -I {} cp {} lib/
# 2. 运行 thin jar
java -jar annotation-demo/build/libs/annotation-demo-thin.jar./gradlew test- 使用
@Target和@Retention定义注解的作用范围和生命周期 - 结合 AOP 实现注解的功能逻辑
- Spring 提供的异步配置接口
- 可以自定义线程池和异常处理器
- 适用于需要精细控制异步任务执行场景
MIT