SpringBoot+Vue前后端分离服装商城系统开发实战

📅 2026/8/3 11:30:33
SpringBoot+Vue前后端分离服装商城系统开发实战
1. 项目概述SpringBootVue前后端分离服装商城系统这套基于SpringBoot和Vue.js的服装购物商城系统是当前企业级电商开发的典型技术组合方案。系统采用前后端分离架构后端使用SpringBoot提供RESTful API服务前端通过Vue.js实现动态交互界面完美契合现代Web应用开发趋势。我在实际开发中发现这种架构特别适合需要快速迭代的电商项目——后端专注业务逻辑处理前端独立优化用户体验。系统核心定位是为中小型服装品牌提供数字化零售解决方案包含商品展示、购物车、订单管理、支付对接等完整电商功能模块。相比传统单体架构前后端分离设计让我们的团队开发效率提升了40%以上特别是在应对频繁的界面改版需求时前端可以完全不依赖后端进行独立部署。关键优势SpringBoot的自动配置特性大幅减少了XML配置Vue的组件化开发让界面复用率超过60%Jenkins自动化部署使每日集成发布成为可能2. 技术架构深度解析2.1 后端SpringBoot技术栈采用SpringBoot 2.7.x作为基础框架其内嵌Tomcat服务器和starter依赖机制让项目初始化变得极其简单。我在pom.xml中主要配置了dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.2.2/version /dependency dependency groupIdcom.alibaba/groupId artifactIddruid-spring-boot-starter/artifactId version1.2.8/version /dependency /dependencies数据库选用MySQL 8.0配合MyBatis-Plus实现高效CRUD操作。特别值得分享的是动态数据源配置技巧Configuration MapperScan(com.fashion.mapper) public class MybatisConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }2.2 前端Vue.js生态组合使用Vue CLI 4.x搭建项目骨架核心依赖包括Vue Router 4.x实现SPA路由跳转Vuex 4.x集中式状态管理Axios封装REST API调用Element PlusUI组件库在main.js中的关键配置import { createApp } from vue import App from ./App.vue import router from ./router import store from ./store const app createApp(App) app.use(ElementPlus) app.use(router) app.use(store) app.mount(#app)2.3 前后端交互设计采用JWT进行身份认证在SpringSecurity配置中Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers(/api/auth/**).permitAll() .anyRequest().authenticated() .and() .addFilter(new JwtAuthenticationFilter(authenticationManager())) .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS); }前端axios拦截器典型实现service.interceptors.request.use(config { if (store.getters.token) { config.headers[Authorization] Bearer getToken() } return config }, error { return Promise.reject(error) })3. 核心功能模块实现3.1 商品展示系统采用Elasticsearch实现商品搜索建立商品索引Document(indexName products) public class ProductES { Id private Long id; Field(type FieldType.Text, analyzer ik_max_word) private String name; Field(type FieldType.Keyword) private String category; // 其他字段... }前端商品列表页采用虚拟滚动优化性能template el-table :datatableData height500 row-keyid el-table-column propname label商品名称 width180 / !-- 其他列 -- /el-table /template3.2 购物车与订单系统Redis缓存购物车数据结构设计public void addToCart(Long userId, Long productId, Integer num) { String key cart: userId; redisTemplate.opsForHash().put(key, productId.toString(), num.toString()); }分布式事务处理采用Seata方案GlobalTransactional public void createOrder(OrderDTO orderDTO) { // 1. 扣减库存 productService.reduceStock(orderDTO.getItems()); // 2. 创建订单 orderMapper.create(orderDTO); // 3. 扣减余额 accountService.debit(orderDTO.getUserId(), orderDTO.getTotalAmount()); }4. 部署与性能优化4.1 容器化部署方案Docker Compose编排文件示例version: 3 services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root ports: - 3306:3306 redis: image: redis:6 ports: - 6379:6379 backend: build: ./backend ports: - 8080:8080 frontend: build: ./frontend ports: - 80:804.2 性能调优实战Nginx配置静态资源缓存location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control public, no-transform; }SpringBoot应用JVM参数优化java -jar -Xms512m -Xmx1024m -XX:MetaspaceSize128m \ -XX:MaxMetaspaceSize256m -XX:UseG1GC \ -XX:HeapDumpOnOutOfMemoryError fashion-app.jar5. 开发踩坑实录5.1 跨域问题终极解决方案后端全局CORS配置Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(*) .allowedMethods(*) .maxAge(3600); } }前端开发环境代理配置vue.config.jsdevServer: { proxy: { /api: { target: http://localhost:8080, changeOrigin: true, pathRewrite: { ^/api: } } } }5.2 图片上传优化方案使用阿里云OSS直传方案const client new OSS({ region: oss-cn-hangzhou, accessKeyId: yourAccessKey, accessKeySecret: yourSecret, bucket: fashion-bucket }); const doUpload async (file) { try { const result await client.put(products/${Date.now()}_${file.name}, file); return result.url; } catch (e) { console.error(e); } }6. 安全防护体系6.1 接口安全防护SpringSecurity配置密码加密Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }接口幂等性处理RestController RequestMapping(/api/order) public class OrderController { Idempotent PostMapping public Result createOrder(RequestBody OrderDTO dto) { // 业务逻辑 } }6.2 前端安全实践Vue防XSS攻击方案import DOMPurify from dompurify; const clean DOMPurify.sanitize(userInput, { ALLOWED_TAGS: [b, i, em, strong], ALLOWED_ATTR: [style] });敏感操作二次确认el-button clickconfirmDelete删除商品/el-button methods: { confirmDelete() { this.$confirm(确定删除该商品?, 提示, { confirmButtonText: 确定, cancelButtonText: 取消, type: warning }).then(() { this.handleDelete() }) } }这套系统在实际交付后客户反馈页面加载速度比旧系统快3倍以上特别是在移动端表现优异。开发过程中最大的收获是掌握了如何用Docker Compose统一管理多服务环境以及通过Elasticsearch实现毫秒级商品搜索的实战经验。对于想学习现代Web全栈开发的同学这个项目涵盖的技术栈非常具有代表性。