1. 项目背景与核心价值
中药作为中华民族的传统医学瑰宝,其知识体系庞大而复杂。对于普通大众而言,如何获取准确、系统的中药科普信息一直是个难题。这个基于SpringBoot的中药科普知识平台正是为了解决这一痛点而生。
我在开发过程中发现,市面上现有的中医药类平台普遍存在两个问题:要么过于学术化,普通用户难以理解;要么信息碎片化,缺乏系统性。我们这个平台尝试用技术手段平衡专业性和普及性,让中药知识真正"飞入寻常百姓家"。
提示:平台设计时要特别注意中医术语的通俗化转换,比如将"归经"解释为"药物作用的身体部位",这是提升用户体验的关键。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 SpringBoot框架选型考量
选择SpringBoot作为基础框架主要基于三个实际考量:
- 快速开发特性:毕业设计周期有限,SpringBoot的自动配置和起步依赖能大幅减少环境搭建时间
- 微服务友好:虽然当前是单体架构,但保留未来扩展为微服务的可能性
- 生态丰富:整合MyBatis、Redis等中间件时社区支持完善
技术栈组合:
- 前端:Thymeleaf + Bootstrap + ECharts
- 后端:SpringBoot 2.7 + MyBatis-Plus + Redis
- 数据库:MySQL 8.0
- 部署:Docker + Nginx
2.2 核心功能模块设计
平台采用模块化设计,主要包含以下功能组件:
| 模块名称 | 核心功能 | 技术实现要点 |
|---|---|---|
| 药材百科 | 中药详细信息展示 | Elasticsearch全文检索 |
| 方剂配伍 | 经典方剂查询与智能推荐 | 协同过滤算法 |
| 养生指南 | 节气养生知识推送 | 定时任务+消息队列 |
| 专家问答 | 在线咨询系统 | WebSocket即时通信 |
| 用户中心 | 个性化收藏与学习记录 | JWT身份认证 |
3. 关键实现细节
3.1 中药知识图谱构建
为解决中药数据非结构化问题,我们设计了专门的知识抽取流程:
- 数据采集:从《中国药典》等权威资料爬取原始数据
- 数据清洗:使用HanLP进行术语标准化处理
- 关系抽取:基于规则模板识别"性味归经"等关联关系
- 图谱存储:Neo4j图形数据库存储实体关系
java复制// 示例:药材实体建模
@Entity
public class Herb {
@Id
private Long id;
private String name; // 药材名
private String pinyin; // 拼音名
private String latinName; // 拉丁学名
@ElementCollection
private Map<String, String> properties; // 性味归经等属性
@ManyToMany
private Set<Disease> indications; // 主治病症
}
3.2 智能推荐系统实现
方剂推荐模块采用混合推荐策略:
- 基于内容的推荐:分析用户浏览记录中的药材特征
- 协同过滤:发现具有相似偏好的用户群体
- 规则过滤:排除药性相克的配伍组合
python复制# 示例:简单的协同过滤实现
def recommend_formulas(user_id):
user_vector = build_user_profile(user_id)
similar_users = find_k_neighbors(user_vector)
recommendations = aggregate_formulas(similar_users)
return apply_tcm_rules(recommendations) # 中医药规则过滤
4. 开发中的典型问题与解决方案
4.1 中医药术语处理难题
问题表现:
- 同一药材有多个别名(如"当归"又称"干归")
- 古今计量单位差异("一两"现代换算约30g)
解决方案:
- 建立别名映射表
- 开发专门的单位转换过滤器
- 前端展示时同时显示古今单位
4.2 性能优化实践
在药材搜索模块遇到的性能瓶颈及优化措施:
- 初始方案:MySQL LIKE查询
- 问题:当数据量>10万条时响应时间>3s
- 第一阶段优化:Elasticsearch索引
- 效果:平均响应降至800ms
- 最终方案:ES+缓存预热
- 实现:定时任务预加载热门搜索
- 效果:99%请求<200ms
重要提示:中药数据更新频率低但查询量大,这种场景特别适合采用缓存策略。
5. 部署与运维要点
5.1 多环境配置管理
采用SpringBoot的profile机制实现环境隔离:
yaml复制# application-dev.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/tcm_dev
username: devuser
password: dev123
# application-prod.yml
spring:
datasource:
url: jdbc:mysql://prod-db:3306/tcm_prod
username: ${DB_USER}
password: ${DB_PASS}
5.2 容器化部署方案
Docker Compose编排文件关键配置:
dockerfile复制version: '3'
services:
app:
image: tcm-platform:1.0
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- redis
- elasticsearch
redis:
image: redis:6-alpine
ports:
- "6379:6379"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
environment:
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
6. 毕业设计特别建议
根据指导多届毕业设计的经验,分享几个关键注意事项:
-
文档撰写技巧:
- 系统设计图建议使用PlantUML绘制,比Visio更易维护
- 接口文档用Swagger UI自动生成
- 数据库设计要包含ER图和字段说明
-
答辩准备重点:
- 准备3个典型用户场景的演示脚本
- 对技术选型要能说明比较过程
- 提前模拟问答环节
-
代码质量把控:
- 使用SonarQube进行静态代码分析
- 关键算法编写单元测试
- Git提交信息规范化
这个项目最让我有成就感的是看到非专业用户也能通过平台理解"君臣佐使"这样的中医复杂概念。技术实现上,将Elasticsearch的拼音搜索与中医药术语处理相结合的方案,在实际应用中取得了出乎意料的好效果。如果时间允许,下一步我计划加入AR药材识别功能,让传统中医药文化以更现代的方式传播。
