一步步教你如何开发Java项目:从需求到上线

一步步教你如何开发Java项目:从需求到上线


最近接手开发了一个新的Java项目,前端是一个问卷调查的小程序,一个Web网页后台控制并创建活动区分用户填写渠道


1、需求分析

作为一个后端开发(一般是battle的),一般不参与产品的需求提出,一般由公司或者部门的产品研究员、产品经理、用户、领导等提出

2、需求评审

既然需求无法避免,那就开发吧,此时一般产品经理和前后端以及测试团队会一起开会,首先与讨论需求能不能实现?再到怎么实现,使用什么技术?大概需要多少人开发,开发时间大概多久,整个团队心里大概都有一个数。我的产品就是一个匹兹堡睡眠量表的简化版用户填写问卷调查,有单选、多选、填空,不同的选项积分规则不同,稍微复杂一点就是积分的规则不是简单的相加,可能有附加题(选择某些选项触发)、计算睡眠效率积分,根据选择计算总分,根据用户选择不同的选项对应返回不同的睡眠问题,再根据不同的问题是哪些因素导致的,最后提出解决办法。所有的数据都是后端判断处理的,前端只负责展示(突然发现前端好幸福)

3、系统设计

//一般技术选型由项目经理或者开发组长来定,我们只有产品经理、后端、前端、测试,所以技术选型和数据库选择都是我定的,
1、主架构:采用springboot 2.6.X和mybatis-plus(这是个好东西,不涉及复杂操作,大部分都可以很快的开发)单体架构完成 
2、数据库采用mysql 5.7.X完成
3、redis作为缓存

4、前后端开发

4.1 开发文档的确定

这就是自己部门内部聊了,一般来说,就是后端负责开发文档的设计开发、前端等着后端出文档(也有反过来的),我们协同就是靠apifox 完成,这个软件还是不错的,一个集成软件很多功能都有,小团队的话也是免费的。
//这里注意一点,后端设计好前端传参的时候最好要给前端过目一下,如果有不同的想法最好在开发前提出来,都开发一半了发现自己的设计有缺陷或者有不合理的地方就麻烦了

4.2准备好自己的项目模版

从我有限的开发经验来看,做一个成熟稳重的后端(没错,就是本人)手头上需要有一个自己熟悉拿捏的后端模版,首先何为模版?模版就是基本的功能都有了,你马上就能开发并很快的部署上线,那么这个模版有哪些内容呢?(这个后期有时间我可以出一个模版,还是踩了不少的坑再慢慢完善的)
 //---------------------------------------------------------------------------------------
1、三层架构(这个不用说)
  controller、service、mapper
2、exception类 
  全局异常和自定义异常(这个很重要!)程序员最重要的就是debug能力,详细并且合理的日志系统对于定位和解决bug至关重要(当然不能指望这个,在开发的时候要保证健壮性,我当时就有一个没注意,被测试抓到了,这我的锅,下面会讲到)
3、config配置类 
  比如说阿里云的配置类、微信小程序的配置类、jwt的配置类、redis的配置类、mybatis分页配置类,拦截器的配置类等等
4、interceptor 拦截器
  我是后台和小程序都有自己单独的拦截器
5、common类 
  我这里封装了一些返回结果的封装类、错误类型的枚举类等等
6、model类 
  这里包含了数据库表的映射比如domain 类(pojo\entity都可),DTO类、V类,我目前就这三种,当然还有很多其他的,模版我没有搞那么多,这里推荐使用mybatis-plus 的插件,mybatisX generator插件,你先创建sql表,然后直接生成三层架构的框架,快速的开发。(有需要我后期可以出一个教程)
7、utils 类
  这里都是工具类,比如阿里云的图片、视频上传、excel导入导出功能、发送Http请求的工具类、获取网络ip的工具类、
  jwt生成的工具类等等

这里我有一个思考:很多的公司其实是有一个通用的模版或者是部分的模版,比如结果返回类,大家都用一个,比如一些工具类阿里云、jwt、http 、excel等等,但是我还是觉得每一个后端需要有一个适合自己的模版,如果你接公司之外的活你可以用,或者你自己想开发什么项目也可以用,总不能还用公司的吧。而且我认为如果你能独立的开发自己的模版我觉得这是一个不太容易的事情,如果你可以的话,说明你基础确实很不错(大佬带带我,狗头),所以这也是我自己要整理模版的原因,最大的动力其实就是锻炼自己,想沉淀自己(我是菜鸟)。

4.3logback日志配置

一个项目的日志配置是很重要的,众所周知,debug能力是区分一个普通攻城狮和高级攻城狮的分水岭,良好的日志系统可以让开发人员快速定位bug 并分析原因,可以简单展示一下我的日志,有详细的说明,可以自行的修改,注意,线上的日志不能打debug和info,这也是我为什么说把日志和配置文件提前放在服务器上的。(当然你可以运行的时候指定也可以)

日志配置我也踩了好几个坑,配置一直不对,之间的关系没有捋清楚,所以导致老是不生效,或者没有按照我指定的来完成打印日志,后台可以单独的出个帖子看看,思考一下。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 定义日志文件路径和格式的全局变量 -->
    <property name="log.path" value="${user.dir}/logs" />
    <property name="file.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{50} - %msg%n" />

    <!-- 定义控制台输出格式 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${file.pattern}</pattern> <!-- 控制台输出日志的格式 -->
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level> <!-- 控制台只输出info级别及以上的日志 -->
        </filter>
    </appender>

    <!-- 定义错误日志文件输出 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file> <!-- 错误日志文件的路径 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM-dd}-%i error.log</fileNamePattern>
            <!-- 错误日志文件的滚动策略,按时间和大小滚动 -->
            <maxFileSize>5MB</maxFileSize> <!-- 每个文件最大5MB -->
            <maxHistory>30</maxHistory> <!-- 最多保留30个历史文件 -->
            <totalSizeCap>100MB</totalSizeCap> <!-- 总文件大小不超过100MB -->
            <cleanHistoryOnStart>false</cleanHistoryOnStart>
            <!-- 如果设置为true,应用启动时将删除旧的日志文件 -->
        </rollingPolicy>
        <encoder>
            <pattern>${file.pattern}</pattern> <!-- 错误日志文件的格式 -->
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level> <!-- 只输出ERROR级别的日志到错误文件 -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 设置 MyBatis 和 MyBatis-Plus 的日志级别为error -->
    <logger name="org.apache.ibatis" level="ERROR"/>
    <logger name="com.baomidou.mybatisplus" level="ERROR"/>
    <!-- 设置日志级别 (线上为error)-->
    <root level="info">
        <appender-ref ref="STDOUT" /> <!-- 输出到控制台 -->
        <appender-ref ref="ERROR_FILE" /> <!-- 输出到错误日志文件 -->
    </root>

</configuration>

5、测试和代码评审

5.1、给测试一个查询的用户权限

-- 1. 登录MySQL(这一步在MySQL客户端或命令行工具进行)

-- 2. 创建新用户
CREATE USER 'username'@'%' IDENTIFIED BY 'yourpassword';

-- 3. 授予只读权限
GRANT SELECT ON questionnaireapplet.* TO 'username'@'%';

-- 4. 应用权限更改
FLUSH PRIVILEGES;

-- 如果是修改同理
GRANT UPDATE ON questionnaireapplet.* TO 'username'@'%';
FLUSH PRIVILEGES;

5.2 测试的环境问题

开发一般分为三个环境:开发测试、预生产(也有的没有)、正式,

6、部署上线

6.1单体部署采用jar 包部署

把配置文件yml 以及logback.xml 文件先放到服务器上,使用脚本去部署(也可以采用docker和jenkins 部署,别问我为什么没这么部署,问就是不太会,一个高级的开发攻城狮,应该具备开发、测试、运维,可惜我不是,我是菜鸟,好好好,别骂了,马上去学,然后测试完,我会发个帖子,记录自己成为大佬的过程,狗头!)

7、总结

本文说的基本都是我后端开发一个人做的,后端开发、开发文档设计、数据库设计、测试、运维,说实话,除了前端专门有一个,一个人就是一个项目组,这也是一个趋势吧,现在人工智能越来越普及,我从2023年三四月gpt出了付费版后,就一直用到现在,基本没停过,感触还是很深的,我觉得crud的时代已经过去了,日后的程序员的发展趋势大部分应该是扩展知识面的广度,比如一个人搞开发测试运维甚至前端,就是一个人就是一个项目组,打造超级个体,因为我不认为我深度debug 能力会超过电脑,或者我可以提出一个大型业务落地的解方案,可能都是copy 大厂的模式,成为技术有深度的专家我觉得我没希望了,大部分程序员几乎都没有希望,很多的大厂程序员都是螺丝钉,更何况我这种小角色呢,从领导的角度来说,你能代替很多人,你就是开发,也是项目经理、产品经理,项目部署你也能做,领导觉得提了一个需求,找你之后,你一个人就能落地,你就是可以的,这或许会让我的职业生涯长一些,归根到底在中国这样的人口大国,劳动力就是不缺的(这也是程序员都称为码农),程序员的职业生涯就是很短,大部分有个十年就已经很不错了,很多人都挺不过十年,我觉得我也不例外,与君共勉。

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值