# async
**Repository Path**: zh_0209_java/async
## Basic Information
- **Project Name**: async
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-08-24
- **Last Updated**: 2025-08-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Async Spring Boot Starter
一个基于Spring Boot的异步任务管理starter,支持任务持久化、监控和重试机制。
## 功能特性
- 🚀 异步任务执行
- 💾 任务状态持久化(MySQL + MyBatis)
- 📊 任务监控和统计
- 🔄 自动重试机制
- ⚙️ 可配置的线程池
- 🎯 条件化自动装配
## 项目结构
```
async/
├── async-spring-boot-starter/ # 启动器模块
├── async-spring-boot-autoconfigure/ # 自动配置模块
├── async-spring-boot-core/ # 核心功能模块
└── async-spring-boot-common/ # 公共模块(数据持久化)
```
## 快速开始
### 1. 引入依赖
```xml
com.zh
async-spring-boot-starter
1.0-SNAPSHOT
```
### 2. 配置数据库
在`application.yml`中添加配置:
```yaml
async:
datasource:
enabled: true
url: jdbc:mysql://localhost:3306/async_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
```
### 3. 创建数据库表
执行`async-spring-boot-common/src/main/resources/sql/async_task.sql`中的建表语句。
### 4. 使用异步任务管理器
```java
@Service
public class YourService {
@Autowired
private AsyncTaskManager asyncTaskManager;
private String invokeDemo1() {
return "invokeDemo1";
}
public void executeTask() {
// 提交异步任务
String result = asyncTaskManager.submitTask(this::invokeDemo1);
System.out.println("任务执行结果: " + result);
}
}
```
## 配置说明
### 数据源配置
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| `async.datasource.enabled` | 是否启用数据源 | `true` |
| `async.datasource.url` | 数据库连接URL | - |
| `async.datasource.username` | 数据库用户名 | - |
| `async.datasource.password` | 数据库密码 | - |
### 线程池配置
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| `async.thread-pool.core-pool-size` | 核心线程数 | `8` |
| `async.thread-pool.maximum-pool-size` | 最大线程数 | `16` |
| `async.thread-pool.keep-alive-time` | 线程存活时间 | `120` |
| `async.thread-pool.queue-capacity` | 队列容量 | `4096` |
### 任务配置
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| `async.task.default-max-retry-count` | 默认最大重试次数 | `3` |
| `async.task.default-timeout` | 默认超时时间 | `300000` |
| `async.task.monitor-enabled` | 是否启用监控 | `true` |
## 数据库表结构
### async_task 表
| 字段名 | 类型 | 说明 |
|--------|------|------|
| `id` | BIGINT | 主键ID |
| `task_id` | VARCHAR(64) | 任务ID(唯一) |
| `task_type` | VARCHAR(100) | 任务类型 |
| `status` | VARCHAR(20) | 任务状态 |
| `task_params` | TEXT | 任务参数(JSON) |
| `result` | TEXT | 执行结果 |
| `error_message` | TEXT | 错误信息 |
| `start_time` | DATETIME | 开始时间 |
| `end_time` | DATETIME | 结束时间 |
| `duration` | BIGINT | 执行时长(毫秒) |
| `retry_count` | INT | 重试次数 |
| `max_retry_count` | INT | 最大重试次数 |
| `create_time` | DATETIME | 创建时间 |
| `update_time` | DATETIME | 更新时间 |
## 任务状态
- `PENDING`: 待执行
- `RUNNING`: 执行中
- `SUCCESS`: 成功
- `FAILED`: 失败
- `CANCELLED`: 已取消
## 监控功能
### Druid监控
访问 `http://your-app:port/druid` 查看数据库连接池监控信息。
### 任务监控
通过`AsyncTaskMonitor`接口可以监控任务执行状态和统计信息。
## 扩展功能
### 自定义任务类型
```java
@Component
public class CustomTaskManager implements AsyncTaskManager {
@Override
public T submitTask(Supplier task) {
// 自定义任务执行逻辑
return task.get();
}
}
```
### 自定义回调
```java
@Component
public class CustomTaskCallback implements AsyncTaskCallback {
@Override
public void onSuccess(String taskId, Object result) {
// 任务成功回调
}
@Override
public void onFailure(String taskId, Exception exception) {
// 任务失败回调
}
}
```
## 注意事项
1. 确保MySQL数据库已创建并运行
2. 检查数据库连接配置是否正确
3. 确保数据库用户有足够的权限
4. 建议在生产环境中调整线程池和连接池参数
## 版本信息
- Spring Boot: 2.7.17
- MyBatis: 2.3.1
- MySQL: 8.0.33
- Druid: 1.2.20
- Java: 8+
## 许可证
MIT License