"

加载中...

🎈BallonWords🎈

🎈让文字如气球般自由漂浮,飞向字节的无限云端🎈

BallonWords Banner

✨ 项目灵感: 每个词句都是幸运兔手中的气球 ✨

🚀 快速开始

📥 获取项目

HTTPS
git clone https://github.com/Dddddduo/balloonWords.git

⚙️ 环境要求

  • JDK 17+
  • Maven 3.8+
  • MySQL 8.0+
  • Redis 6.0+
  • RabbitMQ 3.14+
  • Elasticsearch 8.15+

🔧 配置中间件

application-prod.yml
spring:
  # mysql配置
  datasource:
    url: jdbc:mysql://localhost:3306/balloon_words
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver
  # redis配置
  redis:
    host: localhost
    port: 6379
    database: 0
  # rabbitmq配置
  rabbitmq:
    host: localhost
    port: 5672
    username: admin
    password: 123456
    # 基本队列配置
    template:
      default-receive-queue: default_queue # 默认接收队列
      receive-timeout: 5000     # 接收超时时间(毫秒)
      retry:
        enabled: true           # 发送端重试
        max-attempts: 3
        initial-interval: 1000
    # 监听器设置 死信队列配置 (如果需要延迟队列)
    listener:
      simple:
        acknowledge-mode: manual  #消息确认方式
        concurrency: 5            # 最小消费者数
        max-concurrency: 20       # 最大消费者数
        prefetch: 50              # 每个消费者最大未确认消息数
        default-requeue-rejected: false  # 拒绝后不走重试,直接进死信
        retry:
          max-attempts: 3
          enabled: true
          initial-interval: 1000
  # elasticsearch配置
  elasticsearch:
      uris: localhost:9200
      username: elastic
      password: 123456

▶️ 启动项目

1

进入项目目录

cd balloonWords
2

编译项目

mvn clean package -DskipTests
3

运行项目

java -jar target/ans-0.0.1-SNAPSHOT.jar

Java 17

核心开发语言

Spring Boot 3.0.2

应用框架

MySQL

数据存储

Redis

缓存系统

MyBatis

ORM框架

Knife4j

接口文档

RabbitMQ

消息队列

JUnit5+Mockito

单元测试

Transactional

事务管理

Elasticsearch

搜索引擎

Github Action

CI/CD 持续集成,持续交付

Docker Compose

容器化思想 一键部署

jmeter

压力测试

✅ 后期展望

docker使用cannel实时检测mysql

🌱 开发动态

2024-02-22 ~ 2024-02-24

完成基础的五个接口

使用Junit5+MockMvc集成单元测试

2024-02-10 ~ 2024-02-12

设计数据库表

多表联查实现第一个接口 /get

2024-03-01 ~ 2024-03-05

消息队列使用

RabbitMQ解耦接口 用Spring事件监听器控制上下文同步

2024-03-05 ~ 2024-03-10

使用redis降低数据库压力

分布式锁套redissonClient防穿透防止缓存穿透

2024-03-10 ~ 2024-03-13

使用spring事务控制增添操作的原子性

Transactional注解控制超时管理 事务回滚

2024-03-15 ~ 2024-03-17

Elasticsearch完善搜索引擎

降低搜索压力

2024-03-20 ~ 2024-03-21

Docker Compose一键部署

容器 IDEA集成docker

2024-03-22 ~ 2024-03-25

Github自动化Workflows配置

maven项目跑CI/CD流程,代码覆盖率检查

2024-03-26 ~ 2024-03-27

jmeter

对每个接口进行压力测试,并完成报告

📚 API 接口文档

POST /sentence/get
随机获取一条句子
请求参数:
响应示例:
{
    "flag": true,
    "data": {
        "content": "你好像在等十九世纪的青洄,可我是北纬六十七度以北的雪",
        "tagName": ["青春", "故事"]
    }
}
                
POST /sentence/get-all-words
获取所有句子
请求参数:
响应示例:
{
    "flag": true,
    "data": [
        {
            "id": 1,
            "content": "句子内容1",
            "tags": "标签1,标签2"
        },
        {
            "id": 2,
            "content": "句子内容2",
            "tags": "标签2,标签3"
        }
    ]
}
                
POST /sentence/get-tags
获取所有标签
请求参数:
响应示例:
{
    "flag": true,
    "data": [
        {
            "id": 1,
            "name": "标签1"
        },
        {
            "id": 2,
            "name": "标签2"
        }
    ]
}
                
POST /sentence/get-by-tags
根据标签获取句子
请求参数:
[
    {
        "tagId": "1001",
        "tagName": "标签1"
    },
    {
        "tagId": "1002",
        "tagName": "标签2"
    }
]
                
响应示例:
{
    "flag": true,
    "data": {
        "content": "匹配标签的句子内容",
        "tagName": ["标签1", "标签2"]
    }
}
                
POST /sentence/get-all-by-tags
根据标签获取所有匹配的句子
请求参数:
[
    {
        "tagId": "1001",
        "tagName": "标签1"
    },
    {
        "tagId": "1002",
        "tagName": "标签2"
    }
]
                
响应示例:
{
    "flag": true,
    "data": [
        {
            "id": 1,
            "content": "匹配标签的句子内容1",
            "tags": "标签1,标签2"
        },
        {
            "id": 2,
            "content": "匹配标签的句子内容2",
            "tags": "标签1,标签3"
        }
    ]
}
                

✨ 项目亮点

🧪 完善的测试覆盖

  • 使用 JUnit 5 进行单元测试,确保业务逻辑正确性
  • MockMvc 模拟 HTTP 请求,验证接口行为
  • Mockito 实现依赖注入模拟,隔离测试环境
  • 测试覆盖率 > 80%,保障代码质量
  • 使用 JaCoCo 生成测试覆盖率报告,实现可视化监控

📦 模块化设计

  • 采用清晰的分层架构,实现关注点分离
  • 全局统一的异常处理机制,提升用户体验
  • 规范的接口文档,便于协作开发
  • 可扩展的标签系统,支持灵活的内容管理
  • 采用依赖注入设计模式,降低模块间耦合度

🛠️ 开发规范

  • 严格遵循 Angular 提交规范,保持提交历史清晰
  • 集成 Checkstyle 代码风格检查,确保代码一致性
  • 完善的 CI/CD 流程,实现自动化部署
  • 自动化测试流程,降低回归测试成本
  • 代码审查机制,保障代码质量

🚀 性能优化

  • Redis 缓存机制减轻数据库压力,提升响应速度
  • 分布式锁防止缓存穿透,增强系统稳定性
  • 基于 Elasticsearch 的高效搜索引擎,优化查询性能
  • RabbitMQ 消息队列实现异步处理,提高系统吞吐量
  • JMeter 性能测试,确保系统在高负载下稳定运行

🐳 容器化部署

  • Docker Compose 实现一键部署,简化运维流程
  • 容器化微服务架构,提高系统可扩展性
  • IDEA 集成 Docker,优化开发体验
  • 环境一致性保障,避免"我这里能跑"问题
  • 资源隔离与限制,提高系统安全性

🔒 安全与事务

  • Spring 事务管理确保数据一致性
  • 事务超时控制与回滚机制,防止资源长时间占用
  • API 接口权限控制,保障系统安全
  • 请求参数验证,防止恶意输入
  • 敏感数据加密存储,保护用户隐私

👥 开发人员

感谢所有为 BallonWords 项目做出贡献的开发者们!正是因为你们的参与,才让这个项目不断成长。

Dduo

Dduo

项目负责人 / 后端开发

luoqwe123

luoqwe123

前端开发 / API文档的开发

yapi0420

yapi0420

测试 / 文档书写

666mch

666mch

测试 / 文档书写

🤝 欢迎参与贡献

BallonWords 是一个开源项目,我们非常欢迎更多的开发者参与进来!

如何参与:

  1. 在 GitHub 上 Fork 本项目
  2. 创建您的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交您的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建一个 Pull Request