SpringBoot药店管理系统:从零部署到核心功能实战详解
2026/8/21 6:07:19 网站建设 项目流程

这次我们来看一个基于SpringBoot的药店管理系统。这是一个典型的Java计算机毕业设计项目,提供了完整的源码、安装调试指南和代码讲解。对于正在寻找毕设选题、需要快速搭建一个具备实际业务功能的Java Web项目,或者希望学习SpringBoot整合主流技术栈的同学来说,这个项目是一个可以直接上手、拿来即用的参考方案。

项目的核心是构建一个功能完整的药店业务管理后台,涵盖了药品信息管理、库存管理、销售管理、会员管理、供应商管理等核心模块。它不是一个简单的CRUD演示,而是模拟了真实药店运营中的关键业务流程。本文不会空谈概念,而是直接带你从零开始,完成环境准备、项目导入、数据库配置、服务启动、功能测试的全过程,并深入讲解关键模块的代码实现逻辑。无论你是想直接使用这个项目作为毕设,还是想学习其中的技术实现,都能找到清晰的路径。

1. 核心能力速览

在深入细节之前,我们先通过一个表格快速了解这个项目的核心规格和特点,帮助你判断它是否符合你的需求。

能力项说明
项目类型Java Web 应用,基于 SpringBoot 的单体架构
技术栈SpringBoot, MyBatis/MyBatis-Plus, MySQL, Thymeleaf/Bootstrap (典型组合)
主要功能药品管理、库存盘点、销售收银、会员管理、供应商管理、报表统计
部署方式本地 Jar 包运行 或 IDE 直接启动,支持 Docker 容器化部署(需自行配置)
硬件门槛极低。普通开发机即可,无需GPU。主要依赖Java运行环境和MySQL数据库。
启动方式命令行java -jar或 IDE (如 IntelliJ IDEA/Eclipse) 运行Application主类
接口能力提供标准的 RESTful API 接口,供前后端分离调用(通常项目自带管理界面)
批量任务支持药品信息Excel导入导出、库存批量盘点等
适合场景计算机专业毕业设计、Java/SpringBoot 初学者练手项目、小型药店管理原型系统

从表格可以看出,这是一个技术栈经典、功能务实、部署简单的项目。它的价值不在于使用了多前沿的技术,而在于提供了一个业务逻辑完整、代码结构清晰、可二次开发的实战样本。

2. 适用场景与使用边界

在开始部署之前,明确项目的适用场景和边界非常重要,这能帮助你更好地利用它,并避免误用。

这个项目最适合谁?

  1. 计算机相关专业的毕业生:正在为毕设选题发愁,需要一个功能完整、有文档、能跑通的Java项目作为基础。
  2. Java/SpringBoot 初学者:已经学完基础语法和框架,但缺乏一个完整的项目将知识点串联起来,进行实战练习。
  3. 需要快速搭建管理后台原型的开发者:虽然项目主题是药店,但其用户、角色、权限、CRUD、报表等模块的设计模式,可以快速迁移到其他行业的管理系统中。

它能解决什么问题?

  • 毕设核心功能实现:提供一个可直接演示的、包含增删改查、业务流程、数据可视化的完整系统。
  • 技术栈整合学习:展示SpringBoot如何整合MyBatis、连接MySQL、使用模板引擎渲染页面、处理文件上传下载、实现登录拦截等常见开发任务。
  • 业务逻辑理解:通过药品的进销存管理,理解库存扣减、销售流水、会员积分等基础业务逻辑的代码实现。

它不适合什么场景?

  • 高并发生产环境:作为教学和毕设项目,其架构和代码未针对高并发、大数据量做深度优化,不建议直接用于线上真实药店。
  • 复杂微服务架构学习:本项目是单体应用,如果你想学习Spring Cloud、服务网关、分布式配置等微服务生态,需要寻找其他项目。
  • 前沿技术探索:项目技术栈以稳定、经典为主,不涉及响应式编程、云原生、AI集成等较新领域。

使用边界与合规提醒

  • 数据合规:如果用于演示或学习,请使用模拟数据,切勿导入真实药店的患者隐私信息和药品销售数据。
  • 版权与用途:项目源码通常遵循开源协议(如MIT、GPL),使用时请遵守对应协议,尊重原作者版权。用于毕设时,应在理解的基础上进行修改和扩充,避免直接抄袭。
  • 安全边界:项目自带的登录和权限控制可能较为基础,若计划对外提供访问,务必评估并加强安全措施,如防止SQL注入、XSS攻击、会话固定等。

3. 环境准备与前置条件

要成功运行这个项目,你的开发环境需要满足以下最低要求。请逐项检查,这是后续所有步骤的基础。

  1. 操作系统:Windows 10/11, macOS, 或主流Linux发行版(如Ubuntu 20.04+)。本项目对系统无特殊依赖。
  2. Java开发工具包 (JDK)JDK 8 或 JDK 11。这是SpringBoot 2.x 版本最兼容的JDK版本。推荐使用JDK 11。
    • 检查命令:打开终端或命令提示符,输入java -versionjavac -version,确认版本号。
    • 环境变量:确保JAVA_HOME环境变量已正确设置,并且%JAVA_HOME%\bin(Windows) 或$JAVA_HOME/bin(Linux/macOS) 已加入系统PATH。
  3. 项目管理与构建工具Apache Maven 3.6+。项目通常使用Maven进行依赖管理和构建。
    • 检查命令:在终端输入mvn -v,确认Maven已安装且版本符合要求。
  4. 集成开发环境 (IDE,强烈推荐)IntelliJ IDEA Ultimate/Community EditionEclipse with STS插件。IDEA对SpringBoot的支持更友好,能极大提升开发效率。
  5. 数据库MySQL 5.7 或 8.0。这是最常用的数据库。
    • 安装MySQL:从官网下载安装包并完成安装。
    • 启动服务:确保MySQL服务正在运行。
    • 客户端工具:准备一个数据库客户端,如MySQL Workbench,Navicat, 或 IDEA 自带的 Database 工具。
  6. 版本控制 (可选但推荐)Git。用于克隆项目源码。
  7. 网络:需要稳定的网络连接,以便Maven从中央仓库下载项目依赖的jar包。

环境验证清单

  • [ ] JDK 版本为 8 或 11
  • [ ] Maven 版本为 3.6+
  • [ ] MySQL 服务已启动,并知道 root 用户密码
  • [ ] IDE (IDEA/Eclipse) 已安装并可以正常打开

4. 安装部署与启动方式

假设你已经从提供的渠道(如Git仓库、压缩包)获得了项目源码。接下来,我们分步完成项目的导入、配置和启动。

4.1 获取与导入项目

  1. 获取源码:将项目压缩包解压到一个没有中文和空格的目录,例如D:\Projects\pharmacy-system。或者使用Git克隆命令(如果提供了Git地址)。
  2. 使用IDEA打开项目
    • 启动 IntelliJ IDEA。
    • 选择File->Open...,然后导航到你解压的项目根目录(该目录下应包含pom.xml文件)。
    • 点击OK,IDEA会将其识别为一个Maven项目并开始导入。

4.2 配置数据库

这是最关键的一步,大部分启动失败都源于数据库配置错误。

  1. 创建数据库:使用你的MySQL客户端(如MySQL Workbench),连接上你的MySQL服务,然后执行以下SQL语句创建一个新的数据库(假设数据库名为pharmacy_db,字符集使用utf8mb4以支持中文)。
    CREATE DATABASE IF NOT EXISTS `pharmacy_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  2. 导入初始数据(如果提供):检查项目源码中是否包含SQL脚本文件(通常位于src/main/resources目录下,或根目录的sql文件夹中,文件可能叫init.sqlschema.sql)。如果有,在MySQL客户端中选中刚创建的pharmacy_db数据库,然后运行这个SQL脚本,它会创建所有必要的表并可能插入一些测试数据。
  3. 修改项目配置文件:在项目中找到SpringBoot的配置文件,通常是src/main/resources/application.ymlapplication.properties
    • 打开这个文件,找到关于数据库连接的部分。
    • 将其中的url,username,password修改为你本地MySQL的实际信息。
    # application.yml 示例配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/pharmacy_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root # 改为你的MySQL用户名 password: your_password # 改为你的MySQL密码
    # application.properties 示例配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/pharmacy_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=your_password

4.3 解决依赖与构建项目

IDEA导入项目后,会自动检测pom.xml并开始下载依赖(右下角有进度条)。如果网络较慢或失败,可以尝试:

  1. 检查IDEA的Maven设置:File->Settings->Build, Execution, Deployment->Build Tools->Maven,确认Maven home pathUser settings fileLocal repository路径正确。
  2. 使用阿里云镜像加速:在settings.xml(通常位于Maven的conf目录或用户目录的.m2下)的<mirrors>部分添加阿里云镜像。
  3. 手动触发下载:在IDEA右侧的Maven工具栏中,点击刷新按钮(Reimport All Maven Projects)。

等待所有依赖下载完成,项目结构不再报红。

4.4 启动项目

有几种方式可以启动SpringBoot应用:

方式一:通过IDEA直接运行(推荐用于开发调试)

  1. 在IDEA的项目结构中,找到主启动类。它通常被@SpringBootApplication注解修饰,名字类似PharmacyApplicationApplicationXXXApplication,位于src/main/java下的某个包内(如com.example.pharmacy)。
  2. 右键点击这个类,选择Run ‘XXXApplication.main()‘
  3. 观察IDEA下方的RunConsole窗口。如果启动成功,你将看到SpringBoot的横幅(banner)和一系列日志,最后一行通常是类似Started XXXApplication in 5.123 seconds (JVM running for 6.456)的信息。

方式二:通过Maven命令打包后运行(用于测试或部署)

  1. 在项目根目录打开终端(或IDEA的Terminal)。
  2. 执行打包命令:mvn clean package -DskipTests。这会在target目录下生成一个可执行的Jar文件(如pharmacy-system-0.0.1-SNAPSHOT.jar)。
  3. 运行Jar包:java -jar target/pharmacy-system-0.0.1-SNAPSHOT.jar

方式三:使用SpringBoot Maven插件运行在终端中,项目根目录下执行:mvn spring-boot:run

4.5 访问系统

项目启动成功后,默认情况下,SpringBoot应用会监听8080端口。打开你的浏览器,访问http://localhost:8080http://127.0.0.1:8080

你应该能看到系统的登录页面。常见的默认登录账号密码可能是admin/adminadmin/123456,具体请查阅项目附带的说明文档(如README.md)。

如果页面无法访问,请继续查看下一节的常见问题排查。

5. 功能测试与效果验证

成功登录系统后,我们需要对核心功能进行测试,以验证项目运行正常,并理解其业务逻辑。

5.1 药品信息管理测试

测试目的:验证基础的CRUD(增删改查)功能是否正常,这是整个系统的基础。

  1. 进入模块:在系统菜单中找到“药品管理”、“药品信息”或类似入口。
  2. 查询列表:页面应默认加载所有药品列表,包含药品编号、名称、规格、生产厂家、库存数量、进价、售价等信息。
  3. 新增药品:点击“新增”或“添加”按钮,弹出一个表单。填写必填信息,如药品名称、分类、规格、单位、生产厂家、进价、售价、库存预警上下限等,然后提交。
    • 预期结果:提交后,页面刷新或给出成功提示,新增的药品出现在列表末尾或通过查询可以找到。
    • 验证点:数据是否成功写入数据库?页面是否无错误?
  4. 修改药品:在药品列表的操作列,点击某条记录的“编辑”或“修改”按钮。修改某个字段(如售价),然后保存。
    • 预期结果:保存后,列表中对应该药品的信息已更新。
  5. 删除药品:点击某条记录的“删除”按钮(通常会有二次确认弹窗)。
    • 预期结果:该药品从列表中消失。
    • 注意:检查是否有外键约束。如果该药品已有销售记录,直接删除可能会失败,系统应给出友好提示。这是业务逻辑完整性的体现。

5.2 库存管理测试

测试目的:验证库存的动态变化逻辑,这是进销存系统的核心。

  1. 库存查询与盘点:进入“库存管理”或“库存查询”页面。可以按药品名称、批次等进行筛选。尝试进行“盘点”操作,手动修正库存数量。
  2. 入库操作:进入“采购入库”或“药品入库”模块。模拟一次采购:
    • 选择供应商(需先在“供应商管理”中添加)。
    • 选择药品、输入入库数量、进价、批号、生产日期、有效期至。
    • 提交入库单。
    • 预期结果:提交后,对应药品的库存数量应增加。同时,在“入库记录”查询中应能看到刚创建的记录。
  3. 出库/销售操作:进入“销售管理”或“收银台”模块。这是最复杂的业务点。
    • 扫码/选择药品:模拟顾客购买,添加多种药品到购物车。
    • 修改数量:尝试修改购物车中药品的数量。
    • 会员折扣:如果系统支持会员,输入会员卡号,查看是否自动计算折扣。
    • 结算:点击结算,选择支付方式(现金、微信、支付宝等模拟)。
    • 预期结果
      • 生成一张销售单据,包含明细和总额。
      • 对应药品的库存数量应实时减少
      • 如果使用了会员,会员积分应增加。
      • 在“销售流水”或“收银记录”中能查到这笔交易。

5.3 会员管理测试

测试目的:验证用户体系与积分系统的联动。

  1. 会员注册/添加:在“会员管理”中,添加一个新会员,填写姓名、电话、积分等信息。
  2. 会员消费:重复5.2节的销售操作,在结算时输入该会员的电话或卡号。
  3. 积分查询:销售完成后,再次查看该会员的信息,确认积分是否按规则增加。
  4. 积分兑换:如果系统有积分兑换功能,测试用积分抵扣部分金额。

5.4 报表统计测试

测试目的:验证系统数据汇总和分析能力。

  1. 销售报表:进入“销售统计”或“报表中心”,选择今日、本周、本月的销售数据报表。查看图表(如柱状图、饼图)是否能正常显示。
  2. 库存报表:查看“库存预警报表”,列出库存低于下限或高于上限的药品。
  3. 毛利分析:查看“毛利分析”报表,了解不同药品或时间段的销售毛利情况。

功能测试成功标准

  • 所有页面加载正常,无JS错误或404。
  • 所有增删改查操作能正确与数据库交互,页面反馈及时。
  • 核心业务流程(采购->入库->销售->扣库存->积分)数据链路贯通,无逻辑错误。
  • 报表数据与基础业务数据能对应上。

6. 接口 API 与批量任务

虽然这是一个自带管理界面的项目,但其后端是基于SpringBoot的,必然提供了RESTful API。理解这些API对于前后端分离开发或二次集成至关重要。同时,系统通常也支持一些批量操作。

6.1 接口API调用示例

项目启动后,除了Web页面,其提供的API接口也可以通过工具(如Postman、curl)直接调用。首先,你需要找到API文档或通过查看代码来了解接口。

常见接口列表(需根据实际项目代码确认)

  • GET /api/drugs- 获取药品列表
  • GET /api/drugs/{id}- 获取单个药品详情
  • POST /api/drugs- 新增药品
  • PUT /api/drugs/{id}- 修改药品
  • DELETE /api/drugs/{id}- 删除药品
  • POST /api/login- 用户登录
  • GET /api/sales/daily- 获取日销售报表

使用Postman测试登录接口示例: 假设登录接口为POST http://localhost:8080/api/login,请求体为JSON格式。

  1. 打开Postman,新建一个POST请求。
  2. 地址栏输入http://localhost:8080/api/login
  3. 选择Body->raw->JSON
  4. 输入JSON内容:
    { "username": "admin", "password": "admin" }
  5. 点击Send
  6. 预期响应:如果成功,应返回一个包含tokensession信息的JSON对象,状态码为200。例如:
    { "code": 200, "message": "登录成功", "data": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user": { "id": 1, "username": "admin", "role": "管理员" } } }
    后续调用需要权限的API时,需要在请求头中带上这个Token(如Authorization: Bearer eyJhbGci...)。

使用Java代码调用API示例

import org.springframework.http.*; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.Map; public class ApiClient { public static void main(String[] args) { RestTemplate restTemplate = new RestTemplate(); String loginUrl = "http://localhost:8080/api/login"; // 1. 登录获取Token Map<String, String> loginRequest = new HashMap<>(); loginRequest.put("username", "admin"); loginRequest.put("password", "admin"); ResponseEntity<Map> loginResponse = restTemplate.postForEntity(loginUrl, loginRequest, Map.class); String token = (String) ((Map)loginResponse.getBody().get("data")).get("token"); System.out.println("获取到的Token: " + token); // 2. 使用Token调用受保护的接口,例如获取药品列表 String drugsUrl = "http://localhost:8080/api/drugs"; HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Bearer " + token); // 设置认证头 HttpEntity<String> entity = new HttpEntity<>(headers); ResponseEntity<String> response = restTemplate.exchange(drugsUrl, HttpMethod.GET, entity, String.class); System.out.println("药品列表响应: " + response.getBody()); } }

6.2 批量任务处理

药店管理系统中常见的批量任务包括:

  • 药品信息批量导入:通过上传Excel文件,一次性添加多条药品记录。
  • 库存批量盘点:导出当前库存列表为Excel,线下盘点后,修改Excel再导入更新。
  • 销售数据批量导出:将指定时间段的销售明细导出为Excel或PDF。

实现思路(代码层面)

  1. 文件上传:SpringBoot使用MultipartFile接收上传的文件。
    @PostMapping("/import/drugs") public Result importDrugs(@RequestParam("file") MultipartFile file) { // 1. 校验文件类型(如.xlsx) // 2. 使用Apache POI或EasyExcel读取Excel数据 // 3. 遍历数据行,转换为Drug对象 // 4. 批量插入数据库(可使用MyBatis的批量插入) // 5. 返回导入结果(成功/失败条数) }
  2. 数据读取与校验:使用Apache POI或更高效的EasyExcel库解析Excel,并在插入前进行数据有效性校验(如药品名非空、价格大于0)。
  3. 数据库批量操作:在MyBatis中,可以使用<foreach>标签实现批量插入,或使用MyBatis-Plus的saveBatch方法。
  4. 文件下载:使用HttpServletResponse设置响应头,将数据写入输出流,实现文件下载。
    @GetMapping("/export/sales") public void exportSales(HttpServletResponse response, @RequestParam String startDate, @RequestParam String endDate) { // 1. 查询数据 List<SaleDTO> list = saleService.getSalesBetween(startDate, endDate); // 2. 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment;filename=sales_report.xlsx"); // 3. 使用EasyExcel写入数据到response的输出流 EasyExcel.write(response.getOutputStream(), SaleDTO.class).sheet("销售报表").doWrite(list); }

7. 资源占用与性能观察

作为本地运行的Java Web应用,其资源占用主要关注内存和CPU。

如何观察资源占用?

  1. JVM内存:SpringBoot启动时,默认会分配一定的堆内存。你可以在启动命令中指定JVM参数,例如java -Xms512m -Xmx1024m -jar your-app.jar设置初始堆512M,最大堆1024M。使用jconsolejvisualvm(JDK自带)或Arthas等工具可以监控堆内存使用情况、线程数和GC活动。
  2. CPU使用率:在任务管理器(Windows)或top命令(Linux/macOS)中查看Java进程的CPU占用。在无用户访问的空闲期,CPU占用应接近0%。执行复杂查询或报表生成时,CPU占用会短暂升高。
  3. 数据库连接池:SpringBoot默认使用HikariCP连接池。在application.yml中可以配置其参数,如最大连接数。如果并发请求多,连接数不足会导致性能瓶颈。监控日志中是否有连接超时的警告。
    spring: datasource: hikari: maximum-pool-size: 10 # 根据实际需求调整 connection-timeout: 30000
  4. 响应时间:这是最直观的性能指标。在浏览器开发者工具的Network面板中,查看每个请求的响应时间(Time)。首页加载、列表查询应在几百毫秒内完成,复杂报表生成可能在1-3秒。

影响性能的关键因素

  • 数据库查询:没有索引的大表全表扫描是性能杀手。检查药品表、销售流水表是否在经常查询的字段(如药品名、销售时间)上建立了索引。
  • 业务逻辑复杂度:一次销售操作可能涉及多个表的更新(库存表、销售主表、销售明细表、会员积分表),要确保这些操作在一个事务内完成,并且事务范围合理,避免长事务。
  • 前端资源:如果管理界面使用了较多大型的JS库(如ECharts用于报表)或高分辨率图片,会影响首页加载速度。可以考虑使用CDN或对静态资源进行压缩。

优化建议

  • 对于毕设演示,通常不需要优化。但如果数据量增大后感觉变慢,可以:
    • 为常用查询字段添加数据库索引。
    • 对复杂的统计报表,考虑使用定时任务预先计算并缓存结果。
    • 检查并优化复杂的Java循环和数据库N+1查询问题。

8. 常见问题与排查方法

在部署和运行过程中,你可能会遇到以下问题。这里提供了系统的排查思路。

问题现象可能原因排查方式解决方案
启动失败,端口被占用8080端口已被其他程序(如另一个SpringBoot应用、Tomcat)使用。1. 查看启动日志,是否有Web server failed to start. Port 8080 was already in use.错误。
2. 命令行执行netstat -ano | findstr :8080(Win) 或lsof -i:8080(Mac/Linux) 查看占用进程。
1.终止占用进程
2.修改应用端口:在application.yml中添加server.port: 8081
启动失败,数据库连接错误1. MySQL服务未启动。
2. 数据库名、用户名、密码错误。
3. 数据库驱动版本不匹配。
4. 时区设置问题。
查看启动日志,错误信息会明确指出连接失败。1. 启动MySQL服务。
2. 仔细核对application.yml中的数据库配置。
3. 确认pom.xml中MySQL驱动版本与安装的MySQL版本兼容(5.7用mysql-connector-java,8.0用mysql-connector-j)。
4. 在JDBC URL中加上&serverTimezone=Asia/Shanghai
页面访问4041. 服务未成功启动。
2. 访问的URL路径错误。
3. 静态资源路径不对。
1. 确认控制台有Started ...日志。
2. 确认浏览器访问的端口号正确。
3. 查看浏览器控制台(F12)的Network标签,看具体哪个资源请求404。
1. 根据启动日志解决启动问题。
2. 尝试访问http://localhost:8080/http://localhost:8080/indexhttp://localhost:8080/login
3. 检查Controller中的@RequestMapping注解路径。
页面样式丢失(CSS/JS加载失败)静态资源未被正确映射。SpringBoot默认将staticpublic等目录下的资源映射为静态资源。1. 浏览器F12查看Network,确认CSS/JS文件的请求状态是否为404。
2. 检查这些文件是否在src/main/resources/static目录下。
1. 确保静态资源文件位于正确目录。
2. 如果使用了模板引擎(如Thymeleaf),检查页面中引用资源的路径是否正确,应使用th:href="@{/css/style.css}"语法。
登录失败,提示用户名密码错误1. 数据库中没有初始用户数据。
2. 密码加密方式不匹配。
1. 检查是否执行了初始化的SQL脚本。
2. 查看代码中用户登录的Service层,看密码是如何比对的(可能是明文,也可能是MD5/Bcrypt加密后比对)。
1. 运行项目提供的初始化SQL脚本。
2. 如果知道加密方式,可以手动在数据库中插入一个加密后的密码记录,或者修改代码临时取消加密进行测试。
新增/修改数据后,页面不显示或报错1. 数据库字段约束不满足(如非空字段为空)。
2. 前后端数据格式不一致(如日期格式)。
3. 服务器端代码有未处理的异常。
1.查看浏览器控制台(F12),看前端JS是否有报错。
2.查看IDEA或终端中的服务端日志,这是最重要的排错信息,会打印出详细的异常堆栈。
1. 根据服务端日志的异常信息修改代码或数据。
2. 检查实体类(Entity)与数据库表字段是否映射正确。
3. 使用Postman直接调用后端API,隔离前端问题。
打包成Jar后运行,找不到模板页面或静态资源SpringBoot打包后,模板文件(如.html)需要放在classpath:/templates/,静态资源在classpath:/static/。如果路径不对,运行Jar时会找不到。检查src/main/resources目录结构是否正确。确保资源文件放在src/main/resources下的正确子目录中。标准的SpringBoot项目结构会自动处理。

通用排错流程

  1. 看日志:永远第一时间查看应用启动和运行时的控制台日志,错误信息通常非常明确。
  2. 隔离问题:是前端问题(浏览器F12报错)还是后端问题(服务端日志报错)?是数据库问题还是业务代码问题?
  3. 简化复现:尝试用最简单的方式(如Postman调用一个纯GET接口)复现问题。
  4. 搜索错误:将日志中的关键错误信息复制到搜索引擎中,很大概率能找到解决方案。

9. 最佳实践与使用建议

为了让这个项目更好地服务于你的毕设或学习,这里提供一些工程化和合规性上的建议。

  1. 代码理解优先于直接使用:不要仅仅满足于让项目跑起来。花时间阅读关键业务的代码,例如:

    • DrugController.java:如何接收请求、调用Service、返回响应。
    • DrugServiceImpl.java:销售药品时,如何保证库存减少和销售记录增加在一个事务里(@Transactional)。
    • DrugMapper.xml:复杂的多表关联查询是如何写的。
    • SecurityConfig.java或拦截器:登录验证和权限控制是如何实现的。
  2. 进行定制化修改:这是毕设获得高分的关键。在理解原有代码的基础上,尝试:

    • 增加新模块:例如,增加一个“药品有效期预警”模块,自动列出即将过期的药品。
    • 优化现有功能:为销售报表增加更丰富的图表类型(如折线图显示销售趋势)。
    • 改善用户体验:为药品列表增加模糊搜索、组合条件查询。
  3. 规范你的开发

    • 版本控制:立即使用Git管理你的代码。每次实现一个功能或修复一个Bug,都进行一次清晰的提交(Commit)。
    • 代码注释:在你修改或新增的代码处,添加清晰的注释,说明意图和逻辑。
    • 数据库备份:在对数据库结构进行重大修改前,备份你的数据库。
  4. 准备演示数据:为了毕设答辩演示流畅,提前在数据库中准备一套“漂亮”的演示数据。包括:

    • 多个分类的药品。
    • 一些供应商和会员。
    • 近一个月的销售流水数据,这样报表看起来才充实。
  5. 关注安全与合规(对毕设尤为重要)

    • 密码存储:检查项目中用户密码是否加密存储(如使用BCrypt)。如果没有,这是一个重要的改进点。
    • 输入验证:确保所有用户输入(如表单)在后端都进行了有效性验证和防SQL注入处理。
    • 权限控制:理解现有的权限模型(如基于角色的访问控制RBAC)。思考是否完善,例如收银员不应该有药品采购的权限。
    • 数据脱敏:在演示和论文中,如果涉及数据截图,确保手机号、身份证号等敏感信息已做脱敏处理(如显示为138****5678)。
  6. 文档与部署

    • 更新README:根据你的修改,更新项目的README.md,写明项目简介、技术栈、部署步骤、你的新增功能等。
    • 准备部署脚本:可以编写一个简单的Shell脚本或Dockerfile,让答辩老师能一键启动你的项目,这会是非常大的加分项。

这个基于SpringBoot的药店管理系统项目,为你提供了一个绝佳的Java Web实战起点。它的价值不仅在于一套可运行的代码,更在于其展现了一个完整业务系统的骨架。从环境搭建、配置调试到功能测试和代码研读,整个过程本身就是一次宝贵的学习。建议你按照本文的步骤,亲手将它运行起来,然后选择一个你最感兴趣的功能模块,深入其代码,尝试进行修改和扩展。当你能够清晰地解释其中某个业务流程的代码实现时,你对SpringBoot和业务开发的理解将会上升一个坚实的台阶。建议收藏本文,在部署和开发过程中遇到问题时,随时回来查阅排查思路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询