Spring实战(第5版)个⼈项⽬与填坑记录
博客为项⽬的ReadMe⽂件间歇性同步,实时更新与代码参考
Spring实战(第5版)练习项⽬
写在前⾯:这本书⾮常不推荐Spring新⼿看,甚⾄没有⼯作经验的同学都不建议观看,⼀是作者对代码极不负责任,很多改动都不在书中写⽽是偷偷地改,导致⾃⼰跟着书搭建时踩坑⽆数,⼆是这本书属于新技术的讲解,对于⼊门Spring或者加深Spring使⽤技巧的意义都很低。
换句话说,这本书从第1部分Spring基础之后就可以放着了,后⾯的内容全是⼤坑并且意义真的不⼤,肺腑之⾔—2021.08.13
项⽬简介:跟随Spring实战第5版,使⽤SpringBoot⾃⼰搭建的TacoCloud项⽬。
项⽬特点:
1. 从第3章开始就使⽤⼯程通⽤的MySql数据库搭建持久层,⽽⾮书本的H2(从第6章开始变回了H2,否则实在⽆法跑通作者代码);
2. 对书本中的诸多问题进⾏⽂字和项⽬的填坑记录,给予其他同学⼀定地填坑帮助;
适合新手的spring boot3. 从第六章开始,把每章⾃⼰调试OK的项⽬单独拉分⽀存储,便于后续按章调整,也便于填坑对照参考。
项⽬规划:
1. 边学习边搭建,但考虑到作者对⾃⼰历史代码的改动“极不负责任”,所以在完成这本书的核⼼内容学习之前,不会对代码做过多个
⼈风格的调整;
2. 保证每章学习完成后,项⽬能保证之前章节的流程正常跑通,并通过当前章节作者所书写的UT。
项⽬吐槽(⾃由发挥空间):
1. 这本书⾏⽂很烂,实践和书本表达脱节严重,⼤量代码在GitHub中改了,但是书上只字未提。如果是选择像我这样⾃⼰跟着书本从头
搭建项⽬,会吃不少苦头,基本每章都需要仔细地看哪些类在GitHub中改过,然后更新代码;
2. 使⽤了⼯程环境不可能使⽤的H2数据库和很少使⽤的thymeleaf,和实际⼯作脱节较为严重,只存在⼀定的参考作⽤。
填坑记录(填坑历史可查代码提交记录)
当前进展:第7章功能⾃测完成,UT由于作者⾃⼰未保证故放弃(⾄此弃坑,填不填以后再说)。
基础原则1:每章的代码跟着看完+打完->对照GitHub复查缺失或直接CV⼤法->开始调试,前⾯两步骤如果没做好会让⼈浪费很多时间在⽆意义的调试上。
第1章 Spring起步
1. 通常都是使⽤IDEA进⾏Java编码,所以需要先搞定IDEA的破解或注册;
2. 1.2.2节的l先较于作者GitHub代码存在缺失,建议去参考补充下;
3. 作者的各个html都不加图⽚src,导致直接在idea中打开⽆法加载图;
4. ⾃动编译功能:打开idea的⾃动编译->项⽬启动后随便修改什么再点构建(Ctrl+F9也OK)
第2章开发Web应⽤
1. 作者的各种html直接复制也会标红报错,莫慌,正常现象,不影响⽤;
2. 作者会偷偷改各个html,务必对照,不要问我怎么知道的;
3. 秉持基础原则1;
第3章使⽤数据
1. 如果使⽤最新版本的SpringBoot,H2数据库在IDEA中配置会很困难。这⾥是⼀个很⼤的分歧点,要么竭尽所能去配置好H2数据
库,要么和我⼀样使⽤更⼯程性质的MySql(这⾥务必提个醒,使⽤MySql的话,前⽅的荆棘会更多,但也会更爽)
2. 作者会偷偷把Taco类的ingredients改成List,此乃第3章第⼀⼤坑,务必同步加⼊IngredientByIdConverter类,代码参考
GitHub;
3. 作者会偷偷改各个html,务必对照,秉持基础原则1;
4. JDBC阶段,使⽤MySql的话,Ingredient库在存储时id会按照字母排序,导致⽆法过作者的UT,此时可加⼊pid作为⾃增主键保证该
表存储顺序为插⼊数据,以过UT;
5. JPA阶段,JPA的改造建议跟在这⾥做了,Repository相关接⼝的调整也都跟着在这章做了,后⾯作者都会⽤JPA,JDBC的东西别
留恋,能删就删了,尤其那俩sql⽂件;
6. JPA阶段,JPA如果要存储在本地MySql需要做⼀些配置,可以参考我的application.properties,或者⾃⼰百度;
7. JPA阶段,JPA+MySql同样存在存储时id会按照字母排序导致⽆法过作者UT的问题,此时可以在Ingredient实体类中新增pid主键,
并同步⼿动改写IngredientRepository中的findById⽅法保证从id查Ingredient⽽不是从pid查。
第4章保护Spring
1. 最后会选⽤基于JPA的⽅式,其他基于的⽅式该⼲掉⼲掉,之后会有启动影响,前⾯建议第3章把JPA的坑踩完也是这个原因;
2. 作者会偷偷把DesignTacoController中taco()的模型名改成design,Order类中⼤量字段改名,最后⼜偷偷把所有html全改了,务
必秉持基础原则1;
3. 这章作者的UT每次启动都会塞数据,所以想过作者的UT就务必配置spring.jpa.hibernate.ddl-auto=create,保证每次的数据都是新
的,尽量不要⾃⼰玩花的。玩花的可以先试⼀试再删掉,因为作者的UT卡的⾮常死。
第5章使⽤配置属性
1. pom中新增spring-boot-configuration-processor,否则会报springboot配置注解处理器没有到;
2. 元数据json和props中会报重新运⾏SPRING BOOT CONFIGURATION ANNOTATION PROCESSOR来更新⽣成的元数据,可管
可不管,想管上StackOverFlow查;
3. 作者加了个orderList.html,秉持原则1补上;
4. 作者新增了discount相关的⼀系列控制器、配置项和html,对第5章⽽⾔没什么实际作⽤,但是属于后⾯章节的铺垫,建议秉持原则
1在这节都加上;
5. application.properties和l可以同时配置,如果习惯前者可以把适合在yml中配的迁移过去。
第6章创建REST服务
1. 第6章的变动及其之⼤,直接将以前的1个模块变成了7个,这是作者极不负责任的表现,当然这么喷也没意义,该填的坑还是的填。
同时从这章开始,每章都会单独起分⽀,便于以后按章节调整;
2. 鉴于作者本次改动量过⼤,建议直接根据ch06的源代码进⾏CV⼤法完成项⽬重构。项⽬重构中有⼏个重点问题如下:
1. 为了保证迁移的准确性,最好直接完全复制作者的源代码;
2. 使⽤IDEA的话,ui和tacos模块⾃动导⼊时存在解析错误,最好⼿动导⼊这两个模块;
3. 需要保证项⽬的JDK为1.8,如果不是⽆法启动项⽬,会报错;
4. 截⽌2021.08.09,即使直接复制作者代码+正确的1.8版本也会⽆法启动代码,报hibernate-validator中类缺失的问题,原因
是hibernate-validator和hibernate-core版本不⼀致,最好将⼦类中所有validator新版本排掉,然后在⽗parent pom中加
core对应的5.2.2版本‘
5. 这⼀章的,或者从第6章开始项⽬的⽬的是提供后端的api接⼝,保证数据提供,所以不会像前5章⼀样做多页的html界⾯;
3. 这章也是到了为什么IDEA⼀直起不来H2数据库的终极原因,有两点:
1. H2的数据库需要本地起H2 Console后再在右下⾓任务栏右键H2图标创建数据库才⾏,否则⽆法连接(以后每次启动项⽬前都
要记得⼿动启动H2);
2. IDEA使⽤的H2数据库版本是1.4.200和1.4.196,然后截⽌2021.08.11,项⽬中的H2数据库版本为1.4.197,和idea⽀持的
两个版本⽆法完全对应,导致数据⼀写⼊就读取失败。这⾥需要⼿动调整项⽬的H2数据库版本为200或者196。
3. 配置中⽅⾔配置为spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
4. 如果选择内存加载⽅式可以保证每次启动没问题,但是存在⽆法直观查看表中数据的问题;所以最好选择tcp⽅式建表,并调整
ddl-auto为update,保证数据持久并能多次启动使⽤;
4. SpringDataRestConfiguration⾥的匿名类如果修改为lambda表达式后,api功能都将会⽆效,所以最好别动;
5. 这⼀章的UT已经名存实亡,就当看个笑话吧,作者的第6章最⼤问题就是步⼦迈地太⼤了,⼀下⼦没法顾得上之前的各种设计了;
6. 这⼀章的tacocloud-ui模块都是前端内容,截⽌2021.08.11有⼀些加载问题,选择放着不去解决。
第7章消费REST服务
1. 这章很短,讲了如何通过RestTemplate和Traverson实现RestApi的消费,但是书上没有任何例⼦,其实具体到代码中就是新增了
tacocloud-restclient模块;
2. 这章的UT也是个笑话,注意作者167页7.1.1节 Get资源的第⼀句话,“假设API没有实现HATEOAS”。我寻思⼤家都是第6章过来
的,按照你的说法就还得把HATEOAS改掉呗,作者对⾃⼰以前代码的不负责任着实到了⼀种境界;
3. 还是这章的UT,前半部分是⾮HATEOAS即不带API的,后半部分是HATEOAS带API,这UT能跑通就出了⿁了,⾄此彻底破防,对
这本书的好感度基本降到冰点。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论