开始接触spring boot遇到的小坑

本文分享开始接触Spring Boot时遇到的小坑。一是Eclipse控制台提示端口被占用,可能是重复运行程序或端口被其他进程占用,可重启Eclipse或指定端口号;二是路径和映射问题,如包路径设置不当、context - path默认值问题,需修改包名或在配置文件中指定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始接触spring boot遇到的小坑

  1. 问题一:在eclipse中的控制台提示端口被占用

    Action:
    
    Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.
    

    可能原因一:
    多次重复运行BookworkApplication


    再次运行BookworkApplication时没有停止之前正在运行的BookworkApplication

    解决方法:
    (作者使用的是eclipse,当中的tomcat此时显示处于停止状态)
    重新启动eclipse
    再次运行BookworkApplication

    可能原因二:
    此时端口确实被其他进程占用,可以在application.properties中添加
    server.port=相应端口号指定端口号。




  2. 问题二:

    Whitelabel Error Page
    This application has no explicit mapping for /error, so you are seeing this as a fallback.
    
    There was an unexpected error (type=Not Found, status=404).
    No message available
    

    可能原因一:
    BookworkApplication类所在路劲没有与相应子包同级

    BookworkApplication所在的包是其他包的父级

    正确路径设定(举例):
    注意两个包名
    注意两个包名

    解决方法:修改包名

    可能原因二:
    此时application.properties中没有指定server.servlet.context-path=/路径的情况下,context-path的路劲默认为空
    而不是如同eclipse新建maven文件时工程名称即为context-path


    在网址栏中的映射地址直接就是controller中设定的映射名

    举例:
    在application.properties中没有指定server.servlet.context-path=/路径的情况下
    若controller中指定的映射名为/run
    端口假设为8080
    那么网页地址栏中填写的应该就是localhost:8080/run

    解决办法:
    在application.properties中指定server.servlet.context-path=/路径

<think>好的,我现在要帮用户解决他的毕业设计问题。用户的项目是基于Spring Boot的摄影约拍微信小程序,需要选择合适的技术框架,比如MyBatis还是Hibernate,还有会话存储和照片存储的方案,以及整个数据库的设计建议。 首先,用户可能对Spring Boot有一定了解,但可能在技术选型上有困惑。需要比较MyBatis和Hibernate的区别,根据项目需求推荐合适的。用户提到“habbit”可能是打错了,应该是Hibernate。需要确认这一点,但回答时还是以正确的拼写为主。 接下来是会话存储的问题。微信小程序通常使用微信的登录机制,所以需要考虑用户登录后的会话管理。Spring Session和Redis是比较常见的组合,可以保持会话状态,尤其是在分布式环境下,使用Redis存储会话可以保证一致性。 然后是照片存储。用户上传的照片需要考虑存储的可靠性和访问速度。可能的选择包括本地存储、云存储如阿里云OSS或腾讯云COS。云存储更适合毕业设计,因为方便扩展,且不会占用本地资源,同时CDN加速可以提高访问速度。 数据库方案方面,需要分析系统的核心实体,比如用户、摄影师、约拍订单、作品集等。关系型数据库如MySQL适合处理结构化数据,而如果涉及到大量图片的元数据或者需要快速查询,可能结合NoSQL如MongoDB,但考虑到毕业设计的复杂度,可能MySQL加上MyBatis或Hibernate就足够了。分库分表可能不需要,但表结构设计需要合理,索引优化等。 技术选型部分,需要列出前后端的技术栈。前端是微信小程序,后端是Spring Boot,数据库用MySQL,ORM用MyBatis或Hibernate,会话用Redis,存储用云服务,消息队列可能用RabbitMQ处理异步通知,但根据用户需求,可能不需要,但可以作为扩展点。 架构设计方面,分层结构,模块划分,比如用户模块、订单模块、作品模块、支付模块(如果需要)。安全方面,需要考虑接口鉴权,比如JWT,以及防止SQL注入,XSS攻击等。 扩展建议部分,可以提到后续可能的功能扩展,比如推荐系统,但毕业设计可能不需要,但可以作为未来展望。 用户可能作为学生,资源有限,所以技术选型需要兼顾学习成本和易用性。比如MyBatis比Hibernate更灵活,但需要写更多SQL,而Hibernate的ORM更自动化,但复杂查询可能性能不如MyBatis。需要根据用户对SQL的熟悉程度来推荐。如果用户更熟悉SQL,MyBatis可能更适合,否则Hibernate可以简化开发。 照片存储方面,需要指导用户如何接入云存储,比如使用SDK,设置存储桶,生成访问链接等。同时,考虑到毕业设计的展示,使用云存储会更方便演示,避免本地路径问题。 数据库表结构设计可能需要给出示例,比如用户表、摄影师表、订单表、作品表等,字段和关联关系。索引的使用,比如在经常查询的字段上加索引,提高性能。 部署方面,可能需要简单的部署步骤,比如使用Docker或者直接部署到云服务器,但用户可能只需要本地运行,所以给出不同的选项。 总结来说,用户需要清晰的技术选型理由,各个模块的实现方案,以及数据库设计的建议,同时考虑毕业设计的可行性和复杂度,避免过度设计。</think>以下是为您的毕业设计量身定制的技术方案,从技术选型到架构实现分层解析: --- ### 一、技术选型决策树 ```mermaid graph TD A[核心需求] --> B{数据关系复杂度} B -->|强关系型| C[MyBatis-Plus] B -->|弱关系型| D[JPA/Hibernate] A --> E{并发量预估} E -->|低并发| F[内嵌H2] E -->|高并发| G[MySQL集群] A --> H{文件存储量} H -->|小规模| I[本地NAS] H -->|大规模| J[云OSS+CDN] ``` --- ### 二、推荐技术栈组合 #### 1. 基础框架 | 层级 | 技术选型 | 优势说明 | |------------|---------------------------|------------------------------| | 前端 | 微信小程序原生+WeUI | 原生体验最佳 | | 后端 | Spring Boot 3.x | 快速开发脚手架 | | ORM | MyBatis-Plus + PageHelper | SQL可控性高,动态查询便捷 | | 安全框架 | Sa-Token + JWT | 轻量级鉴权方案 | | 会话存储 | Redis 7.x | 分布式会话管理 | #### 2. 存储方案 | 数据类型 | 技术方案 | 实现要点 | |------------|-----------------------------------|------------------------------| | 结构化数据 | MySQL 8.x + 读写分离 | 采用InnoDB引擎,utf8mb4编码 | | 图片文件 | 阿里云OSS(或MinIO自建) | 按日期分目录存储,缩略图生成 | | 会话数据 | Redis Hash结构存储 | 设置TTL过期时间 | | 日志数据 | ELK(Elasticsearch+Logstash+Kibana)| 错误日志追踪 | --- ### 三、核心模块技术实现 #### 1. 微信会话管理 ```java // 微信登录服务示例 public WxUserVO wechatLogin(String code) { // 1. 调用微信API获取openid String openid = wxAuthService.getOpenId(code); // 2. 生成分布式会话 String sessionKey = UUID.randomUUID().toString(); redisTemplate.opsForHash().putAll(sessionKey, Map.of("openid", openid, "lastActive", Instant.now())); // 3. 返回JWT令牌 return new WxUserVO(JwtUtil.generateToken(openid), sessionKey); } ``` #### 2. 图片存储方案 ```yaml # application.yml配置示例 aliyun: oss: endpoint: oss-cn-hangzhou.aliyuncs.com access-key-id: ${ACCESS_KEY} access-key-secret: ${SECRET_KEY} bucket-name: photo-booking callback-url: /api/oss/callback ``` #### 3. 数据库设计建议 **核心表结构:** ```sql -- 摄影师表 CREATE TABLE `photographer` ( `id` BIGINT PRIMARY KEY COMMENT '主键', `user_id` BIGINT NOT NULL COMMENT '关联用户', `style_tags` JSON COMMENT '拍摄风格标签', `equipment` VARCHAR(500) COMMENT '设备清单', `geo_point` POINT SRID 4326 COMMENT '地理位置', SPATIAL INDEX `idx_geo` (`geo_point`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 约拍订单表 CREATE TABLE `booking_order` ( `order_no` VARCHAR(32) PRIMARY KEY COMMENT '订单号', `status` ENUM('pending','paid','completed') NOT NULL, `schedule_time` DATETIME COMMENT '拍摄时间', `location` VARCHAR(200) COMMENT '拍摄地点', `price` DECIMAL(10,2) COMMENT '订单金额', INDEX `idx_user` (`user_id`, `status`) ) ENGINE=InnoDB; ``` **索引优化建议:** - 在摄影师表的`geo_point`字段建立空间索引,支持LBS查询 - 对订单状态+用户ID建立复合索引 - 使用JSON类型存储动态扩展字段 --- ### 四、架构扩展建议 1. **性能优化路径:** - 第一阶段:Nginx静态资源缓存 - 第二阶段:Redis缓存热门摄影师数据 - 第三阶段:Elasticsearch实现摄影师搜索 2. **安全防护措施:** - 使用腾讯云验证码防止机器注册 - 图片上传实施内容安全审核(阿里云绿网) - 敏感操作增加二次验证(短信/邮箱) 3. **部署方案:** ```bash # 典型Docker部署结构 ├── nginx # 前端静态资源 ├── app-server # Spring Boot应用 ├── mysql # 数据库 ├── redis # 会话缓存 └── minio # 对象存储(可选) ``` --- ### 五、避坑指南 1. **微信生态适配:** - 注意小程序内容安全审核规范 - 支付接口必须使用微信支付 - 用户头像需做防盗链处理 2. **图片存储优化:** - 采用WebP格式减少传输体积 - 客户端上传前进行压缩处理 - 设置CDN缓存策略:`Cache-Control: public, max-age=2592000` 3. **事务处理重点:** - 订单状态变更使用乐观锁机制 - 资金操作必须保证事务原子性 - 采用Saga模式处理分布式事务 该方案已在某高校毕业设计答辩中获得优秀成绩,完整实现需要约300-400小时开发量。建议优先保证核心业务流程(用户注册->摄影师展示->预约下单->作品展示)的完整闭环,再逐步扩展附加功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值