从零构建旅游网站:SpringBoot3与Vue3全栈开发实践指南

一、系统架构设计

本系统采用前后端分离架构,后端基于SpringBoot3框架构建RESTful API服务,前端使用Vue3+TypeScript实现响应式界面,数据库选用主流关系型数据库。这种架构具备高扩展性,可支持日均万级访问量,同时通过JWT实现无状态认证,保障接口安全性。

技术选型关键点:

  • 后端框架:SpringBoot3的自动配置特性可减少50%以上基础代码量
  • 前端框架:Vue3的Composition API使组件逻辑更清晰,配合Pinia实现状态管理
  • 接口规范:采用OpenAPI 3.0标准设计API文档,前后端开发并行推进

二、开发环境搭建

  1. 脚手架初始化
    使用Spring Initializr生成基础项目结构,配置JDK17+Gradle构建工具。前端通过Vite创建Vue3项目模板,安装axios、Element Plus等核心依赖。
  1. # 后端项目初始化
  2. curl https://start.spring.io/starter.zip -d type=gradle-project \
  3. -d dependencies=web,security,data-jpa \
  4. -o travel-backend.zip
  5. # 前端项目初始化
  6. npm create vite@latest travel-frontend --template vue-ts
  1. 跨域配置
    在SpringBoot配置类中添加CORS支持,允许前端开发服务器访问API:
  1. @Configuration
  2. public class CorsConfig implements WebMvcConfigurer {
  3. @Override
  4. public void addCorsMappings(CorsRegistry registry) {
  5. registry.addMapping("/**")
  6. .allowedOrigins("http://localhost:5173")
  7. .allowedMethods("*")
  8. .allowCredentials(true);
  9. }
  10. }

三、核心功能实现

1. 目的地分类管理

采用树形结构存储分类数据,实现无限层级分类。关键实体类设计:

  1. @Entity
  2. public class DestinationCategory {
  3. @Id @GeneratedValue
  4. private Long id;
  5. private String name;
  6. private Integer level;
  7. @ManyToOne
  8. private DestinationCategory parent;
  9. @OneToMany(mappedBy = "parent")
  10. private List<DestinationCategory> children = new ArrayList<>();
  11. }

前端使用递归组件渲染分类树,支持拖拽排序功能:

  1. <script setup lang="ts">
  2. const categories = ref<Category[]>([]);
  3. const renderTree = (nodes: Category[]) => {
  4. return nodes.map(node => (
  5. <div class="category-node">
  6. {node.name}
  7. {node.children && renderTree(node.children)}
  8. </div>
  9. ));
  10. };
  11. </script>

2. 预订系统开发

设计三表关联的数据库模型:

  • orders:订单主表
  • order_items:订单明细表
  • payments:支付记录表

关键业务逻辑实现:

  1. @Transactional
  2. public Order createOrder(Long userId, List<OrderItemDTO> items) {
  3. // 1. 校验库存
  4. items.forEach(item -> {
  5. Destination dest = destinationRepo.findById(item.getDestinationId())
  6. .orElseThrow(() -> new RuntimeException("目的地不存在"));
  7. if (dest.getStock() < item.getQuantity()) {
  8. throw new RuntimeException("库存不足");
  9. }
  10. });
  11. // 2. 创建订单
  12. Order order = new Order();
  13. order.setUser(userRepo.getReferenceById(userId));
  14. order.setStatus(OrderStatus.PENDING);
  15. // ...其他字段设置
  16. // 3. 扣减库存
  17. items.forEach(item -> {
  18. destinationRepo.updateStock(
  19. item.getDestinationId(),
  20. -item.getQuantity()
  21. );
  22. });
  23. return orderRepo.save(order);
  24. }

3. 支付系统集成

采用预授权模式实现资金冻结,关键流程:

  1. 用户选择支付方式后生成预订单
  2. 调用支付网关进行预授权
  3. 支付成功后更新订单状态
  4. 异步通知处理支付结果
  1. public PaymentResult processPayment(Long orderId, PaymentDTO payment) {
  2. Order order = orderRepo.findById(orderId)
  3. .orElseThrow(() -> new RuntimeException("订单不存在"));
  4. // 调用支付网关API
  5. String preAuthId = paymentGateway.preAuthorize(
  6. order.getTotalAmount(),
  7. payment.getPaymentMethod()
  8. );
  9. // 记录预授权信息
  10. PaymentRecord record = new PaymentRecord();
  11. record.setOrder(order);
  12. record.setPreAuthId(preAuthId);
  13. record.setStatus(PaymentStatus.AUTHORIZED);
  14. paymentRepo.save(record);
  15. return new PaymentResult(true, "预授权成功", preAuthId);
  16. }

四、版本控制策略

采用Git Flow工作流管理项目版本:

  1. main分支:存放稳定发布版本
  2. develop分支:集成开发分支
  3. feature/*分支:功能开发分支
  4. release/*分支:发布准备分支

关键操作示例:

  1. # 创建功能分支
  2. git checkout -b feature/payment-integration develop
  3. # 开发完成后合并到develop
  4. git checkout develop
  5. git merge --no-ff feature/payment-integration
  6. # 准备发布时创建release分支
  7. git checkout -b release/v1.0.0 develop
  8. # 发布完成后合并到main
  9. git checkout main
  10. git merge --no-ff release/v1.0.0
  11. git tag -a v1.0.0 -m "Release v1.0.0"

五、性能优化方案

  1. 数据库优化

    • 为常用查询字段建立索引
    • 使用JPA的@BatchSize注解优化N+1查询问题
    • 实施读写分离架构
  2. 缓存策略

    • 使用Redis缓存热门目的地数据
    • 实现多级缓存(本地缓存+分布式缓存)
    • 设置合理的缓存失效策略
  3. 前端优化

    • 图片资源使用CDN加速
    • 实现组件级懒加载
    • 使用Webpack代码分割减少初始加载体积

六、部署方案

  1. 容器化部署

    1. # 后端Dockerfile示例
    2. FROM eclipse-temurin:17-jdk-jammy
    3. WORKDIR /app
    4. COPY build/libs/*.jar app.jar
    5. EXPOSE 8080
    6. CMD ["java", "-jar", "app.jar"]
  2. CI/CD流水线
    配置GitHub Actions实现自动化构建测试:

    1. name: Java CI
    2. on: [push]
    3. jobs:
    4. build:
    5. runs-on: ubuntu-latest
    6. steps:
    7. - uses: actions/checkout@v3
    8. - name: Set up JDK
    9. uses: actions/setup-java@v3
    10. with:
    11. java-version: '17'
    12. distribution: 'temurin'
    13. - name: Build with Gradle
    14. run: ./gradlew build

本实践方案完整覆盖旅游网站开发的核心环节,通过模块化设计和分层架构实现高内聚低耦合。开发者可根据实际需求调整技术选型和实现细节,建议配合完整的单元测试和集成测试保障系统质量。实际部署时建议采用容器编排工具实现弹性伸缩,满足业务高峰期的访问需求。