Skip to content

Repository files navigation

各种小技能的 Demo

本项目是一个 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 设置文件

模块说明

1. annotation-demo (注解功能演示)

演示如何通过自定义注解 + AOP 切面实现方法级别的限流功能。

核心功能:

  • @Limit 注解:定义限流规则(时间窗口、访问次数、限流类型等)
  • LimitAspect 切面:拦截带有 @Limit 注解的方法,实现限流逻辑
  • 支持多种限流类型:按 IP、按客户、自定义

使用示例:

@Limit(name = "测试接口", key = "test", period = 60, count = 10)
public void testMethod() {
    // 方法逻辑
}

2. async-thread-pool-demo (异步线程池配置演示)

演示如何通过 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 包说明

本项目配置为生成 thin jar(瘦包),而非 fat/uber jar(胖包):

  • Thin Jar: 只包含项目自身的编译代码,不包含第三方依赖

    • 优点:文件体积小,部署灵活
    • 运行方式:需要额外提供依赖 jar 包(通常放在 lib/ 目录)
    • 生成命令:./gradlew :module-name:jar
  • Fat Jar: 包含项目代码和所有依赖

    • 优点:单个文件即可运行
    • 缺点:文件体积大

运行 Thin 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 实现注解的功能逻辑

AsyncConfigurer

  • Spring 提供的异步配置接口
  • 可以自定义线程池和异常处理器
  • 适用于需要精细控制异步任务执行场景

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages