# silky-starter
**Repository Path**: chaibao/silky-starter
## Basic Information
- **Project Name**: silky-starter
- **Description**: silky 是一套面向 Spring Boot 的轻量级、高性能开源组件生态,致力于解决微服务开发中的通用技术痛点。目前已发布以下核心组件:OSS、MongoDB、redis、rabbitMQ、fastExcel等,目标:让开发者"开箱即用",专注业务,告别重复造轮子!
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-02-13
- **Last Updated**: 2026-02-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🚀 Silky Starter:如丝般顺滑的 Spring Boot 组件生态
[]()
[]()
[]()
[](https://aeoliancloud.com/)
[]()
[]()
[]()
[]()
## 🏆 赞助商特别鸣谢
### 🏢 服务器赞助商:风铃云有限公司
为Silky生态提供高性能、高可靠的服务器支持,
助力开发者体验更流畅、更稳定的服务!
🎯 专业云服务 | 🚀 高性能服务器 | 🔒 安全稳定 | 💼 企业级解决方案
## 🌟 生态宣言:告别碎片化,拥抱完整解决方案
> **Silky 不仅仅是一组组件,而是一个完整的开发生态系统!**
> 从数据存储到消息队列,从缓存管理到文件存储,Silky 提供了一站式的企业级解决方案。
> 让开发者告别"拼图式"的技术选型,专注于业务创新,享受如丝般顺滑的开发体验!
## 🏗️ 生态全景图
| 组件模块 | 图标 | 核心价值 | 状态 |
| --------------- | --- | -------------- | ----- |
| **🔄 状态管理** | 🎯 | 复杂业务状态流转如丝般顺滑 | ✅ 已发布 |
| **🐰 消息队列** | 📤 | 企业级消息处理,支持延迟消息 | ✅ 已发布 |
| **💾 缓存全能** | ⚡ | 一站式Redis解决方案 | ✅ 已发布 |
| **📊 NoSQL数据库** | 🍃 | 极简MongoDB操作 | ✅ 已发布 |
| **☁️ 云存储** | 🗂️ | 多云统一文件管理 | ✅ 已发布 |
| **🔧 核心工具** | ⚙️ | 公共基础设施 | ✅ 已发布 |
* * *
## 🎯 生态组件深度解析
### 1. 🚀 Silky StateMachine:重新定义Spring Boot状态管理
**让复杂业务流转如丝般顺滑!**
#### ✨ 核心特性
- **声明式配置**:告别if-else面条代码
- **守卫条件**:业务规则的智能守护者
- **转换动作**:业务逻辑的优雅执行者
- **事件监听**:状态变更的实时广播
#### 🛠️ 5分钟上手
```java
// 🎯 定义状态枚举
public enum OrderState {
CREATED, PENDING_PAYMENT, PAID, SHIPPED, COMPLETED, CANCELLED
}
// ⚡ 配置状态流转
@Configuration
public class OrderStateMachineConfig implements StateMachineConfig {
@Override
public Map getTransitions() {
return Map.of(
"PAY_SUCCESS", new StateTransition("PENDING_PAYMENT", "PAY_SUCCESS", "PAID"),
"SHIP", new StateTransition("PAID", "SHIP", "SHIPPED")
);
}
}
// 🚀 使用状态机
@Service
public class OrderService {
@Autowired private StateMachineFactory stateMachineFactory;
public Order processPayment(Long orderId, PaymentResult payment) {
StateMachineContext context = new StateMachineContext("ORDER", orderId.toString());
GenericStateMachine stateMachine = stateMachineFactory.create("ORDER");
String event = payment.isSuccess() ? "PAY_SUCCESS" : "PAY_FAILED";
stateMachine.trigger(event, context);
return orderRepository.findById(orderId).orElseThrow();
}
}
```
#### 📈 性能数据
- **订单创建到支付完成**:从156ms优化到62ms(⏩ 60%更快)
- **高并发状态转换**:从280 TPS提升到850 TPS(📈 200%更高吞吐)
* * *
### 2. 🔥 Silky RabbitMQ:企业级消息队列解决方案
**开箱即用,丝滑集成!**
#### ✨ 核心特性
- **注解驱动**:`@RabbitMessage` 零侵入发送
- **延迟消息**:毫秒级精度的定时消息
- **多维度持久化**:数据库、Redis、MongoDB全支持
- **智能重试**:可配置次数与间隔,支持指数退避
#### 🚀 使用示例
``` java
// 📤 AOP注解方式(推荐)
@Service
public class OrderService {
@RabbitMessage(
exchange = "order.exchange",
routingKey = "order.create",
businessType = "ORDER_CREATE",
sendMode = SendMode.SYNC,
delay = 30 * 60 * 1000L // 30分钟延迟消息
)
public OrderResult createOrder(CreateOrderRequest request) {
// 业务逻辑处理
OrderResult result = orderMapper.insert(request);
// 方法执行成功后自动发送消息
return result;
}
}
// 📥 消费监听
@Slf4j
@Component
public class OrderCreateListener extends AbstractRabbitMQListener {
public OrderCreateListener() {
super("order.create.queue");
}
@Override
public void onMessage(TradeOrder message, Channel channel, Message amqpMessage) {
log.info("收到订单创建消息: {}", message.getOrderId());
orderProcessService.processOrder(message);
// 自动异常处理和重试机制
}
}
```
#### 🔧 高级特性
``` yaml
spring:
rabbitmq:
silky:
send:
default-send-mode: SYNC
enable-retry: true
max-retry-count: 3
persistence:
enabled: true
type: DATABASE # 支持DATABASE/REDIS/MONGODB
```
* * *
### 3. ⚡ Silky Redis:一站式高性能缓存解决方案
**五大核心功能,彻底告别Redis痛点!**
#### 🎯 五大核心模块
| 功能 | 图标 | 描述 |
| --------- | -- | --------------------- |
| **智能缓存** | 💾 | FastJson2序列化,性能提升35%+ |
| **分布式锁** | 🔒 | 事务感知,完美解决并发问题 |
| **唯一单号** | 🔢 | 高并发安全的分布式ID生成 |
| **分布式限流** | 🚦 | 三种算法应对不同场景 |
| **地理位置** | 🌍 | 高效的地理位置计算与搜索 |
#### 🛠️ 快速使用
``` java
// 💾 智能缓存
@Service
public class ProductService {
@Autowired private RedisCacheTemplate redisCacheTemplate;
public void cacheProduct(Product product) {
redisCacheTemplate.setObject("product:" + product.getId(), product, 1, TimeUnit.HOURS);
}
}
// 🔒 分布式锁(事务感知)
@RedisLock(key = "'order:' + #orderId", lockType = LockType.REENTRANT, waitTime = 10)
@Transactional
public void processOrder(String orderId) {
// 业务逻辑,锁会在事务提交后自动释放
}
// 🔢 唯一单号生成
@RedisSequence(
redisKey = "order:number",
prefix = "ORDER",
datePattern = "yyyyMMdd",
sequenceLength = 6
)
public String generateOrderNumber() {
return null; // 由切面自动生成,如:ORDER20231130143015000001005
}
// 🚦 分布式限流
@RateLimit(
key = "'api:user:register:' + #request.ip",
algorithm = RateLimitAlgorithm.TOKEN_BUCKET,
capacity = 100,
refillRate = 10
)
public ApiResponse userRegister(UserRegisterRequest request) {
// 令牌桶限流,平滑控制流量
}
```
* * *
### 4. 🍃 Silky MongoDB:革命性的NoSQL操作体验
**Lambda表达式 + 多数据源,开发效率暴增300%!**
#### ✨ 革命性特性
- **Lambda表达式**:类型安全,告别字段名硬编码
- **多数据源切换**:一行注解搞定数据源切换
- **读写分离**:自动路由,零配置上手
- **事务支持**:企业级数据一致性保障
#### 🚀 代码对比
``` java
// ❌ 传统写法(容易出错)
Query query = new Query();
query.addCriteria(Criteria.where("userName").is("张三"));
query.addCriteria(Criteria.where("userAge").gt(18));
List users = mongoTemplate.find(query, User.class);
// ✅ Silky写法(类型安全,IDE智能提示)
List users = silkyMongoTemplate.list(
new LambdaQueryWrapper<>(User.class)
.eq(User::getName, "张三") // IDE自动补全
.gt(User::getAge, 18), // 编译期检查
User.class
);
```
#### 🔄 多数据源管理
``` java
@Service
public class MultiDataSourceService {
// 🎯 注解切换数据源
@DataSource("user_db")
public List getUsers() {
return silkyMongoTemplate.list(User.class);
}
@DataSource("order_db")
public List getOrders() {
return silkyMongoTemplate.list(Order.class);
}
// 🚀 跨数据源事务
@Transactional
public void createUserAndOrder(User user, Order order) {
silkyMongoTemplate.switchDataSource("user_db");
User savedUser = silkyMongoTemplate.save(user);
silkyMongoTemplate.switchDataSource("order_db");
order.setUserId(savedUser.getId());
silkyMongoTemplate.save(order);
// 💡 两个操作在同一个事务中!
}
}
```
#### ⚡ 性能优化
- **批量插入1万条**:从1250ms优化到280ms(🚀 77%性能提升)
- **复杂条件查询**:从45ms优化到22ms(🚀 51%性能提升)
* * *
### 5. ☁️ Silky OSS:多云统一的文件存储解决方案
**智能上传,断点续传,让文件管理如丝般顺滑!**
#### ✨ 核心特性
- **多云支持**:阿里云OSS、华为云OBS等(可扩展)
- **智能上传**:根据文件大小自动选择最佳上传方式
- **断点续传**:大文件分片上传,网络波动不影响体验
- **进度监控**:实时获取上传进度信息
- **安全可控**:支持加密上传和权限控制
#### 🚀 快速开始
##### 1️⃣ 添加依赖
``` xml
io.github.yijuanmao
silky-oss-spring-boot-starter
最新版本
com.aliyun.oss
aliyun-sdk-oss
3.18.3
com.huaweicloud
esdk-obs-java
3.25.7
```
##### 2️⃣ 配置参数
``` yaml
silky:
oss:
access-key: 你的AccessKey
secret-key: 你的SecretKey
bucket: 你的Bucket名称
multipart-threshold: 134217728 # 128MB,超过此大小自动分片上传
multipart-part-size: 33554432 # 32MB,每个分片大小
provider: aliyun # 平台:aliyun、huawei
# 阿里云配置
aliyun:
endpoint: 阿里云OSS的Endpoint
# 华为云配置
huawei:
endpoint: 华为云的Endpoint
```
##### 3️⃣ 使用示例
``` java
@Service
public class FileUploadService {
@Autowired
private OssTemplate ossTemplate;
/**
* 智能上传(根据文件大小自动选择最佳上传方式)
*/
public String uploadFile(MultipartFile file) {
OssUploadParam param = new OssUploadParam();
param.setObjectKey("uploads/" + System.currentTimeMillis() + "_" + file.getOriginalFilename());
param.setFile(new File(file.getOriginalFilename()));
param.setContentType(OssFileTypeEnum.fromFileName(file.getOriginalFilename()).getContentType());
OssUploadResult result = ossTemplate.smartUpload(param);
return result.getUrl();
}
/**
* 大文件分片上传
*/
public String uploadLargeFile(File largeFile) {
// 1. 初始化分片上传
InitiateMultipartUploadParam initParam = new InitiateMultipartUploadParam();
initParam.setObjectKey("largefiles/" + largeFile.getName());
InitiateMultipartResult initResult = ossTemplate.initiateMultipartUpload(initParam);
String uploadId = initResult.getUploadId();
List partETags = new ArrayList<>();
// 2. 分片上传
long partSize = 32 * 1024 * 1024; // 32MB
long fileLength = largeFile.length();
int partCount = (int) (fileLength / partSize);
if (fileLength % partSize != 0) {
partCount++;
}
for (int i = 0; i < partCount; i++) {
UploadPartParam partParam = new UploadPartParam();
partParam.setUploadId(uploadId);
partParam.setPartNumber(i + 1);
// 设置分片数据流...
UploadPartResult partResult = ossTemplate.uploadPart(partParam);
partETags.add(new PartETag(i + 1, partResult.getEtag()));
}
// 3. 完成分片上传
CompleteMultipartUploadParam completeParam = new CompleteMultipartUploadParam();
completeParam.setUploadId(uploadId);
completeParam.setObjectKey("largefiles/" + largeFile.getName());
completeParam.setPartEtags(partETags);
CompleteMultipartUploadResult result = ossTemplate.completeMultipartUpload(completeParam);
return result.getUrl();
}
/**
* 生成预签名URL(用于临时访问)
*/
public String generatePresignedUrl(String objectKey, int expirationMinutes) {
GenPreSignedUrlParam param = new GenPreSignedUrlParam();
param.setObjectKey(objectKey);
param.setExpirationMinutes(expirationMinutes);
GenPreSignedUrlResult result = ossTemplate.genPreSignedUrl(param);
return result.getUrl();
}
}
```
#### 🔧 高级功能
``` java
// 自定义云服务提供商
@Configuration
public class OssConfig {
@Bean
public void registerCustomProvider(OssTemplate ossTemplate) {
// 创建自定义提供商适配器
OssProviderAdapter customAdapter = new CustomOssProviderAdapter();
// 注册到OSS模板
ossTemplate.registerProvider("custom", customAdapter);
}
}
// 切换云服务提供商
public class CloudSwitchService {
@Autowired
private OssTemplate ossTemplate;
public void switchToHuawei() {
ossTemplate.switchProvider("huawei");
}
public void switchToAliyun() {
ossTemplate.switchProvider("aliyun");
}
}
```
#### 📊 功能特性对比
| 特性 | 传统方式 | Silky OSS | 优势 |
| --------- | ------------- | ---------- | ------ |
| **多平台支持** | 需要为每个平台编写不同代码 | 统一API,一键切换 | 降低维护成本 |
| **大文件上传** | 容易失败,无断点续传 | 自动分片,断点续传 | 稳定可靠 |
| **进度监控** | 需要手动实现 | 内置进度回调机制 | 用户体验好 |
| **安全性** | 需要自行处理加密和权限 | 内置安全机制 | 开箱即用 |
* * *
## 🎪 生态集成:1+1>2的协同效应
### 🗄️ 状态机 + MongoDB + OSS:完整的状态历史与备份
``` java
@Component
public class StateMachinePersistenceService {
@Autowired private MongoTemplate mongoTemplate;
@Autowired private OssTemplate ossTemplate;
/**
* 保存状态历史到MongoDB,重要快照备份到OSS
*/
public void persistState(StateMachineContext context, String fromState, String toState) {
// 1. 保存到MongoDB
StateHistory history = StateHistory.builder()
.machineType(context.getMachineType())
.businessId(context.getBusinessId())
.fromState(fromState)
.toState(toState)
.timestamp(LocalDateTime.now())
.extendedData(context.getVariables())
.build();
mongoTemplate.save(history);
// 2. 重要状态快照备份到OSS
if (isImportantState(toState)) {
String snapshotJson = JSON.toJSONString(context.getVariables());
String backupKey = String.format("state-backup/%s/%s-%d.json",
context.getMachineType(),
context.getBusinessId(),
System.currentTimeMillis());
OssUploadParam param = new OssUploadParam();
param.setObjectKey(backupKey);
param.setStream(new ByteArrayInputStream(snapshotJson.getBytes()));
param.setContentType("application/json");
ossTemplate.smartUpload(param);
}
}
}
```
### 🔄 RabbitMQ + Redis + OSS:高可靠的消息处理与文件存储
``` java
@Component
public class FileProcessingPipeline {
@Autowired private RabbitSendTemplate rabbitSendTemplate;
@Autowired private RedisLockTemplate redisLockTemplate;
@Autowired private OssTemplate ossTemplate;
/**
* 处理文件上传并发送消息通知
*/
public void processFileUpload(FileUploadEvent event) {
// 1. 使用分布式锁防止重复处理
redisLockTemplate.lock("file:process:" + event.getFileId(), 1, 30, TimeUnit.SECONDS, true, () -> {
// 2. 上传文件到OSS
OssUploadParam uploadParam = new OssUploadParam();
uploadParam.setObjectKey("uploads/" + event.getFileId() + "/" + event.getFileName());
uploadParam.setFile(event.getFile());
OssUploadResult uploadResult = ossTemplate.smartUpload(uploadParam);
// 3. 发送消息通知相关服务
FileProcessedMessage message = new FileProcessedMessage();
message.setFileId(event.getFileId());
message.setFileUrl(uploadResult.getUrl());
message.setFileSize(event.getFileSize());
rabbitSendTemplate.send(
"file.exchange",
"file.processed",
message,
"FILE_PROCESSED",
"文件处理完成消息"
);
return uploadResult;
});
}
}
```
* * *
## 📦 快速开始:5分钟集成整个生态
### 1️⃣ 添加依赖
``` xml
io.github.yijuanmao
silky-statemachine-spring-boot-starter
最新版本
io.github.yijuanmao
silky-rabbitmq-spring-boot-starter
最新版本
io.github.yijuanmao
silky-redis-spring-boot-starter
最新版本
io.github.yijuanmao
silky-mongodb-spring-boot-starter
最新版本
io.github.yijuanmao
silky-oss-spring-boot-starter
最新版本
```
### 2️⃣ 启用组件
``` java
@SpringBootApplication
@ComponentScan({"com.silky.**"}) // 🎯 一行注解启用整个生态
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
### 3️⃣ 极简配置
``` yaml
# 统一配置入口
silky:
enabled: true
# MongoDB配置
mongodb:
datasource:
master:
uri: mongodb://localhost:27017/main_db
slave:
uri: mongodb://localhost:27017/read_db
# Redis配置(自动启用所有功能)
redis:
host: localhost
port: 6379
# RabbitMQ配置
rabbitmq:
host: localhost
port: 5672
silky:
send:
default-send-mode: SYNC
persistence:
enabled: true
# OSS云存储配置
oss:
provider: aliyun
access-key: ${OSS_ACCESS_KEY}
secret-key: ${OSS_SECRET_KEY}
bucket: ${OSS_BUCKET}
aliyun:
endpoint: ${OSS_ENDPOINT}
```
### 4️⃣ 创建示例应用
``` java
@RestController
@RequestMapping("/api")
public class DemoController {
@Autowired private StateMachineFactory stateMachineFactory;
@Autowired private RabbitSendTemplate rabbitSendTemplate;
@Autowired private RedisCacheTemplate redisCacheTemplate;
@Autowired private SilkyMongoTemplate silkyMongoTemplate;
@Autowired private OssTemplate ossTemplate;
/**
* 完整的业务处理示例
*/
@PostMapping("/orders")
@RabbitMessage(
exchange = "order.exchange",
routingKey = "order.create",
businessType = "ORDER_CREATE"
)
@RedisLock(key = "'order:create:' + #request.userId", waitTime = 5)
public Order createOrder(@RequestBody CreateOrderRequest request) {
// 1. 限流检查
if (isRateLimited(request.getUserId())) {
throw new RateLimitException("请求过于频繁");
}
// 2. 保存订单到MongoDB
Order order = new Order();
order.setUserId(request.getUserId());
order.setAmount(request.getAmount());
order.setStatus("CREATED");
Order savedOrder = silkyMongoTemplate.save(order);
// 3. 缓存订单信息
redisCacheTemplate.setObject(
"order:" + savedOrder.getId(),
savedOrder,
30,
TimeUnit.MINUTES
);
// 4. 上传订单附件到OSS
if (request.getAttachment() != null) {
OssUploadParam param = new OssUploadParam();
param.setObjectKey("orders/" + savedOrder.getId() + "/attachment");
param.setStream(request.getAttachment().getInputStream());
ossTemplate.smartUpload(param);
}
// 5. 触发状态机流转
StateMachineContext context = new StateMachineContext("ORDER", savedOrder.getId().toString());
context.setVariable("order", savedOrder);
GenericStateMachine stateMachine = stateMachineFactory.create("ORDER");
stateMachine.trigger("CREATE", context);
return savedOrder;
}
private boolean isRateLimited(String userId) {
// 使用Redis限流检查
String key = "rate:order:create:" + userId;
Long count = redisCacheTemplate.increment(key, 1);
if (count == 1) {
redisCacheTemplate.expire(key, 60, TimeUnit.SECONDS);
}
return count > 10; // 每分钟最多10次
}
}
```
* * *
## 🏆 生态价值:为什么选择Silky?
### 🎯 技术价值
1. **完整生态**:覆盖微服务开发全链路,从数据存储到文件管理
1. **极致性能**:每个组件都经过生产环境验证,性能卓越
1. **无缝集成**:组件间天然协作,1+1>2的协同效应
1. **企业级可靠**:事务支持、监控告警、故障恢复一应俱全
### 💰 商业价值
1. **降低总拥有成本**:统一技术栈,减少学习和维护成本
1. **加速产品上市**:开箱即用,聚焦业务创新
1. **提升系统稳定性**:经过验证的企业级解决方案
1. **未来可扩展**:模块化设计,按需引入组件
### 🔄 典型应用场景
- **电商系统**:订单状态机 + 库存缓存 + 支付消息队列 + 商品图片OSS存储
- **内容平台**:MongoDB内容存储 + Redis热点缓存 + OSS媒体文件存储
- **物联网平台**:设备状态机 + 消息队列 + Redis实时缓存 + OSS数据备份
- **金融系统**:分布式锁 + 交易状态机 + Redis限流 + 审计日志OSS存储
* * *
## 📚 学习资源
- **🌐 官方网站**:[https://silky-ecosystem.github.io](https://github.com/yijuanmao/silky-starter)
- **📖 完整文档**:[GitHub Wiki](https://github.com/yijuanmao/silky-starter/wiki)
- **💻 示例项目**:[silky-demo](https://github.com/yijuanmao/silky-starter/tree/master/silky-starter-test)
[//]: # (- **🎬 视频教程**:[B站专栏](https://space.bilibili.com/your-channel))
## 🤝 加入我们
Silky 生态由开发者共建,为开发者服务!我们欢迎:
- 🐞 **提交 Issue**:[报告问题或建议](https://github.com/yijuanmao/silky-starter/issues)
- 🔧 **提交 PR**:欢迎代码贡献,共建更好用的组件
- 📚 **完善文档**:帮助更多人上手使用
- 💬 **技术交流**:加入我们的开发者社区
- ⭐ **Star 支持**:你的认可是我们持续更新的动力
## 🎉 立即开始
**不要再浪费时间在技术选型和组件集成上了!**
选择 Silky 生态,一次性获得企业级的技术基础设施,让团队专注于创造业务价值!
``` bash
# 克隆示例项目,立即体验
git clone https://github.com/yijuanmao/silky-starter.git
cd silky-starter/silky-starter-test
mvn spring-boot:run
```
**加入数千家企业的选择,让 Silky 生态为你的业务注入新的活力!**
* * *
### 👥 加入社区
📢 **关注SilkyStarter**公众号获取最新源码和技术动态!
💬 **加入silky-starter技术交流群**,与众多开发者一起探讨技术问题:
添加微信 `824414828` 或扫描公众号二维码,备注"技术交流"邀请进群
⭐ **如果这个项目帮助了你,请给我们一个Star!**
**如果这让你感同身受,那么今天就是你的幸运日!**
* * *
## 🙏 感谢支持
**如果觉得 Silky 生态对你有帮助,请给我们一个 ⭐ Star 支持!**
**分享给更多开发者,让我们一起构建更好的开发生态!**
### 💳 支持我们
如果你觉得我们的工作对你有帮助,可以捐赠请作者喝杯咖啡~,在此表示感谢!

或者点击以下链接,将页面拉到最下方点击"捐赠"即可
[Gitee上捐赠](https://gitee.com/zeng_er/silky-starter)
* * *
[//]: # (**📧 技术咨询:824414828@qq.com** )
[//]: # (**🌐 关注我们:[@SilkyEcosystem](https://twitter.com/SilkyEcosystem)**)
*本文由 Silky 生态系统团队倾情奉献*