作为一名拥有10年Java全栈开发经验的工程师,我最近完成了一个基于SpringBoot的宠物成长记录平台项目。这个系统采用B/S架构,整合了Vue.js前端框架和MySQL数据库,为宠物主人提供了一个全方位的数字化管理工具。
在实际开发过程中,我发现宠物成长记录这类生活服务类应用存在几个关键痛点:数据分散难管理、健康指标缺乏系统跟踪、养宠经验难以沉淀。这个平台正是针对这些问题设计的解决方案,它不仅能记录宠物的日常活动、饮食和健康数据,还能通过数据分析提供养护建议。
系统采用经典的三层架构设计,前后端分离开发模式。技术栈选择上,我基于以下几个考量:
后端框架:SpringBoot 2.7.x
前端框架:Vue 3.x + Element Plus
持久层:MyBatis-Plus 3.5.x
数据库:MySQL 8.0
技术选型心得:在实际项目中,技术栈的版本匹配非常重要。我建议使用SpringBoot 2.7.x而非最新的3.x系列,因为后者对Java版本要求较高(需要Java17+),而大多数学校环境仍在使用Java8或11。
数据库设计遵循三范式原则,核心表包括:
sql复制CREATE TABLE `pet` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`name` varchar(50) NOT NULL,
`species` varchar(20) NOT NULL,
`breed` varchar(50) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`gender` tinyint DEFAULT '0',
`weight` decimal(5,2) DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
数据库设计时特别注意了以下几点:
系统采用JWT(JSON Web Token)进行认证,结合Spring Security实现权限控制。关键实现点:
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()));
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
安全提示:开发过程中常见的安全漏洞包括SQL注入、XSS攻击等。我建议:
- 始终使用预编译SQL(MyBatis的#{}语法)
- 对用户输入进行转义处理
- 限制上传文件类型
- 定期更新依赖库版本
成长记录是系统的核心功能,主要包括:
前端采用ECharts实现数据可视化:
javascript复制// 体重变化曲线示例
function initWeightChart(data) {
const chart = echarts.init(document.getElementById('weight-chart'));
const option = {
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
data: data.map(item => item.date)
},
yAxis: {
type: 'value',
name: '体重(kg)'
},
series: [{
data: data.map(item => item.weight),
type: 'line',
smooth: true
}]
};
chart.setOption(option);
}
项目支持多种部署方式:
传统部署:
Docker部署:
dockerfile复制FROM openjdk:11-jre
COPY target/pet-growth.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
前后端分离部署:
在实际部署中,我采取了以下优化措施:
缓存策略:
数据库优化:
前端优化:
问题1:SpringBoot与MyBatis-Plus版本冲突
解决方案:保持版本兼容性,建议使用:
问题2:Vue axios跨域问题
解决方案:配置代理或后端CORS:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
问题1:图片上传失败
排查步骤:
问题2:数据库连接泄漏
解决方案:
基于现有系统,可以考虑以下扩展方向:
在实际开发中,我特别推荐使用Git进行版本控制,并建立规范的分支管理策略。例如:
这个宠物成长记录平台项目从技术实现到业务逻辑都具有一定的代表性,涵盖了JavaWeb开发的各个环节。在开发过程中,我最大的体会是:良好的架构设计比编码更重要,合理的分层和模块划分能显著降低后期维护成本。