以下是一个基于Spring Boot + Vue的环保网站实现方案,分为技术选型、系统架构、功能模块、开发步骤和扩展方向五个部分:
一、技术选型
模块 | 技术/工具 |
---|---|
后端框架 | Spring Boot 3.x + Spring Security + MyBatis/Spring Data JPA |
前端框架 | Vue 3 + Vue Router + Pinia + TypeScript |
UI组件库 | Element Plus / Ant Design Vue |
数据库 | MySQL 8.x(核心业务) + Redis(缓存/会话管理) |
数据可视化 | ECharts / D3.js |
地图集成 | 高德地图API / Leaflet |
部署 | Docker + Nginx + Jenkins(CI/CD) |
二、系统架构设计
┌───────────────┐
│ 前端Vue 3 │
│ (Nginx部署) │
└───────┬───────┘
│ HTTP/WebSocket
┌───────▼───────┐
│ Spring Boot API│
│ (RESTful/JWT) │
└───────┬───────┘
┌────────────┼────────────┐
┌─────▼─────┐ ┌────▼────┐ ┌─────▼─────┐
│ MySQL │ │ Redis │ │ MinIO │
│ (业务数据) │ │ (缓存) │ │ (文件存储)│
└────────────┘ └─────────┘ └───────────┘
三、核心功能模块
1. 用户模块
- 注册/登录(邮箱验证码 + JWT)
- 角色权限管理(普通用户、环保机构、管理员)
- 个人中心(碳积分系统、环保成就徽章)
2. 环保数据可视化
- 实时空气质量地图(集成API)
- 垃圾分类统计(饼图/柱状图)
- 碳排放计算器(交互式表单)
3. 资讯与教育
- 环保知识库(Markdown富文本)
- 专家问答社区(类似Stack Overflow)
- 环保课程系统(视频点播 + 学习进度跟踪)
4. 行动参与
- 环保活动报名(地理位置匹配)
- 线上承诺签署(电子签名 + 区块链存证)
- 环保挑战赛(排行榜 + 社交分享)
5. 物联网整合
- 智能垃圾桶数据对接(MQTT协议)
- 环保设备租赁系统(二维码管理)
四、数据库设计要点
-- 示例表结构(简化版)
CREATE TABLE eco_activity (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
start_time DATETIME,
location POINT SRID 4326, -- 存储经纬度
max_participants INT,
cover_image VARCHAR(255)
);
CREATE TABLE carbon_footprint (
user_id BIGINT,
calculation_date DATE,
transportation DECIMAL(10,2),
energy_usage DECIMAL(10,2),
INDEX idx_user_date (user_id, calculation_date)
);
-- 空间索引(用于地理位置查询)
ALTER TABLE eco_activity ADD SPATIAL INDEX(location);
五、开发实施步骤
- 环境搭建
- 后端:
spring-boot-starter-web
+spring-boot-starter-security
+jjwt
- 前端:
vue create
+ 配置Vite + 按需加载组件
- 核心功能开发顺序
- 第一阶段:用户系统 + 基础资讯浏览
- 第二阶段:数据可视化 + 互动社区
- 第三阶段:物联网集成 + 移动端适配
- 关键技术实现
- JWT认证
// Spring Security配置示例
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.antMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class);
- 地理搜索
// 查询10公里内的活动
@Query(value = "SELECT * FROM eco_activity WHERE " +
"ST_Distance_Sphere(location, :point) < :distance",
nativeQuery = true)
List<EcoActivity> findNearbyActivities(@Param("point") Point point,
@Param("distance") int distance);
- 文件上传
<!-- 前端上传组件 -->
<el-upload
:action="uploadUrl"
:headers="{Authorization: `Bearer ${token}`}"
:on-success="handleSuccess"
>
<template #trigger>
<el-button type="primary">上传环保证明</el-button>
</template>
</el-upload>
六、性能优化策略
- 热点数据缓存:使用Redis缓存频繁访问的环保数据
- 大数据分页:采用游标分页代替传统LIMIT分页
- 静态资源CDN:将图片/视频存储到OSS
- 异步处理:使用@Async处理邮件发送等非即时操作
七、扩展方向
- 移动端扩展:Uniapp开发微信小程序
- 区块链应用:环保行为存证上链
- AI集成:图像识别垃圾分类
- 国际版:多语言支持(i18n)
八、部署方案
# docker-compose示例
version: '3'
services:
app:
image: openjdk:17-jdk
volumes:
- ./target/eco-app.jar:/app.jar
ports:
- "8080:8080"
depends_on:
- redis
- mysql
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: eco@1234
redis:
image: redis:6-alpine
该方案兼顾了技术先进性和可实施性,可根据实际需求调整功能优先级。