网易首页 > 网易号 > 正文 申请入驻

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一个项目

0
分享至

在之前的文章中已经陆陆续续讲解了Java开发的一些基础知识,今天来整合这些知识,从无到有完整地搭建一个小型项目,把所讲解的内容逐一融合进去。技术选型是Spring+SpringBoot+Mybatis+MySQL+Maven+Redis+Kafka+Zookeeper+Junit。

一、框架选型说明

先简单地阐述一下我选择这套框架的原因:

1、总体框架是SSM,即Spring+SpringBoot+Mybatis,Springboot是一个微服务框架,延续了spring框架的核心思想IOC和AOP,简化了应用的开发和部署。再搭配Mybatis,简单易上手,目前又有很多的插件来实现自动生成代码,解决了代码繁琐的问题,更多的只关注于核心业务。

2、数据库使用MySQL开源数据库,比较适合个人开发,部署起来也比较容易,前面已经介绍了使用docker-compose可以快速地搭建mysql服务。

3、缓存数据库使用Redis,可以由浅到深,从单机版的redis再到集群版的redis,不断地加强个人对redis的理解和掌握,不管是windows还是linux,不管是单节点还是集群,小编都有接触和实战过,最终还是倾向于使用docker-compose进行部署安装,配置简单操作方便。

4、使用maven作为依赖,来快速地引入jar包进行开发,自动构建部署,参考之前详细的描述《Maven项目管理工具的介绍和使用》

5、集成junit单元测试框架,用于编写和运行可重复的测试,方便调试,参考《SpringBoot框架集成JUnit单元测试》

6、服务通信,使用消息队列MQ,这里使用Kafka,跟redis类似,我们从单机版再到集群版学习逐渐提升拔高,3.0版本目前还不是特别成熟,因此我们使用2.0版本,需要搭配Zookeeper一起使用,使用zookeeper来保存Kafka的元数据、监控Broker和分区的存活状态,并利用ZooKeeper来进行选举,参考《docker-compose部署Kafka》

本次搭建的是一个比较简单的独立小项目,因此暂时不考虑集群和多服务的场景,如果服务较多的话,建议使用注册中心统一管理,可以使用dubbo+zookeeper,再配合haproxy或者nginx,这些之前已有讲解。

二、开发工具和版本

小编使用的是市场上比较通用的一些开发工具,这个按照个人习惯和熟练度,仅作为参考:

1、代码开发工具,使用 IntelliJ IDEA。

2、MySQL使用5.7版本或者8.0版本均可,这两个版本有一定差异。根据官方说法,MySQL 8 要比 MySQL 5.7 快 2 倍,我这里主要搭建框架,暂不论证性能问题。客户端使用navicat 作为可视化工具,方便执行增删改查。可以使用 select version();命名查看MySQL的版本。

3、jdk使用jdk 8 或者 jdk 11。这两个版本都是稳定版本。可以使用 java -version (或者javac -version)命令查看版本。

4、redis 客户端可以使用Redis Desktop

三、框架搭建

1、创建SpringBoot项目

(1)首先打开 IntelliJ IDEA 编辑器创建项目,选择File ->New ->Project,选择 Spring Initializr,选择jdk版本,点击Next。

(2)配置项目信息,Artifact为项目名称 ,group为项目组名,language设置为java ,packaging为打包方式(可选择Jar或者War),注意Type选择Maven Project(我们搭建的是Maven项目)。

(3)选择相应的依赖,选中Lombok、MyBatis、MySQL驱动、Redis、Kafka,当然也可以自己导入,注意默认导入的可能存在版本不匹配的问题,不太推荐这种方式引入依赖。

(4)输入项目名称,创建完成,点击Finish

2、项目配置

项目刚开始搭建完成时,只有一个配置文件application.properties,并且这个配置文件一开始是没有任何内容的,我们把需要的配置加上去,配置文件可以是application.properties格式,也可以是application.yml格式,小编更倾向于application.yml格式,层次更清晰。

项目配置主要包含以下几个方面的内容:

(1)项目的名称、上下文、端口号;

(2)MySQL数据库连接的类型、地址、端口号,以及用户名和密码;

(3)缓存redis数据库连接的ip、端口,密码等,注意redis的单机版和集群版配置差异较大;

(4)日志文件的配置,需要单独配置一个日志的配置类文件logback-spring.xml

(5)mybatis的配置

(6)kafka消息队列的配置

综上,application.yml的配置内容如下:

日志的配置类文件logback-spring.xml内容如下:

3、代码集成

编写代码时,我们往往按照entity->Controller->Service/ServiceImpl->Dao->Xml这样的层次来编写业务模块,其他的还会涉及配置模块Config以及工具类Util。

整体结构如下,逐一在过程中根据提示引入maven仓库的jar包:

接下来我们注意看下每个模块的配置:

(1)启动类SpringBootDemoApplication(命名没有特殊要求)

我们要在外层(相对于config、controller这些文件夹来说的,就是跟controller包同级)写个启动类SpringBootStart。启动main方法,为什么要在controller包同级的地方写个启动类SpringBootStart,这是为了让SpringBootStart处于最外层,这样他能够读取到Controller里面所有的配置文件,当然啦,你也可以在controller下面去写启动方法,不过这样不利于后面测试,因为你每写一个controller都需要改SpringBootStart方法

(2)controller类详细信息如下:

(3)service接口层

serviceImpl接口实现层

(4)dao层

(5)集成mybatis

刚开始创建Maven类型Springboot框架项目的时候,已经添加了Mybatis依赖,也可以手动在pom.xml中添加mybatis的jar依赖。以下是pom.xml文件中添加的所有依赖。

然后在resources下创建mybatis文件夹,编写xml文件,主要就是SQL语句。

4、运行项目

启动项目,配置启动服务SpringBootDemoApplication

使用右侧的maven快捷进行清理、编译和打包,本地运行时先不用打包,运行后控制台会打印相关日志。

5、集成AOP

(1)pom.xml中已添加spring切面aop依赖

(2) 创建日志实体类

(3) 使用spring 的 aop 技术切到自定义注解上,所以先创建一个自定义注解类

(4) 创建aop切面实现类

写入日志表,需要编写SysLogService和dao层以及xml层,这个跟其他业务的写法类似,这里不做赘述。

(5) 在需要监控的方法上添加 aop的自定义注解

格式为 @+自定义注解的类名 例如:@MyLog

6、事务回滚

(1)、启动类添加注解@EnableTransactionManagement 开启事务支持。

(2)、在方法上添加注解@Transactional

如果想要对抛出的任何异常都进行自动回滚(而不是只针对RuntimeException),需要在使用@Transactional(rollbackFor = Exception.class),并throw抛出。可参考上面添加AOP的例子中的手动事回滚。

7、集成Junit

在test目录下,编写Junit测试类,需要在maven引入junit依赖包,示例如下:

8、集成Redis

(1)首先编写redis静态变量配置类(基于我使用的Redis哨兵集群),后面需要用到这里的参数。

(2)Redis配置类

(3)redis 带有分片的哨兵连接池

(4)redis 服务实现

9、集成Kafka

主要是Kafka生产者和消费者,配置如下:

生产者服务:

消费者服务:

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
捧红郭有才的团队!其心可诛!酷似日本天皇裕仁!贼眉鼠眼!

捧红郭有才的团队!其心可诛!酷似日本天皇裕仁!贼眉鼠眼!

开心蕾蕾
2024-05-29 12:07:38
当不成总统了?又一架美军战机被击落,美军被“驱逐”,拜登失声

当不成总统了?又一架美军战机被击落,美军被“驱逐”,拜登失声

大佬日志
2024-05-27 08:00:15
热搜!浙江大学原党委副书记郑强教授,决定与奇瑞开展合作

热搜!浙江大学原党委副书记郑强教授,决定与奇瑞开展合作

蛙斯基娱乐中
2024-05-28 21:39:53
泰离谱!85岁佛寺住持承认吮吸9岁男童丁丁,村民表示依然尊敬他

泰离谱!85岁佛寺住持承认吮吸9岁男童丁丁,村民表示依然尊敬他

一个岛岛
2024-05-28 23:13:20
2024年5月28日美元兑离岸人民币汇率中间价

2024年5月28日美元兑离岸人民币汇率中间价

开心体育站
2024-05-28 15:38:44
算是我去过的最臭的地方了…

算是我去过的最臭的地方了…

悠闲葡萄
2024-05-28 19:39:33
闹大!阿根廷女子花一大笔钱定了海景房 入住后傻眼,中国网友笑喷

闹大!阿根廷女子花一大笔钱定了海景房 入住后傻眼,中国网友笑喷

王二哥老搞笑
2024-05-29 05:58:43
网友曝光神仙般工作状态:上班烧满八壶开水 下班

网友曝光神仙般工作状态:上班烧满八壶开水 下班

侃神评故事
2024-05-29 11:15:03
菲律宾在黄岩岛大败而归,来撑腰的美军航母,这才敢在南海出现

菲律宾在黄岩岛大败而归,来撑腰的美军航母,这才敢在南海出现

娱乐白兔
2024-05-29 12:13:52
济南交警一原副中队长被举报“强奸出轨受贿”,纪检部门回应

济南交警一原副中队长被举报“强奸出轨受贿”,纪检部门回应

飞哥AI矩阵
2024-05-28 10:24:16
骗了我们16年!蒸发300亿,“炊具大王”被消费者狠狠地上了一课

骗了我们16年!蒸发300亿,“炊具大王”被消费者狠狠地上了一课

芯怡飞
2024-05-25 00:47:51
综合续航可达2100公里,王传福:中国插电混动汽车已在“世界之巅”

综合续航可达2100公里,王传福:中国插电混动汽车已在“世界之巅”

澎湃新闻
2024-05-29 07:26:26
荒野求生?克莱:我现在正拿着凯里-欧文的手杖进行户外探险

荒野求生?克莱:我现在正拿着凯里-欧文的手杖进行户外探险

直播吧
2024-05-29 06:42:05
库存积压!保时捷Taycan与Macan甩卖!打3折!才卖40多万!

库存积压!保时捷Taycan与Macan甩卖!打3折!才卖40多万!

网上车市
2024-05-26 22:21:12
残障人士走盲道被石墩阻挡,工作人员称盲道已被商场“买断”?多方回应

残障人士走盲道被石墩阻挡,工作人员称盲道已被商场“买断”?多方回应

新京报
2024-05-29 08:09:00
上海人崩溃:近期大规模爆发!有人吓得不敢出门,看完头皮发麻…这样做可能扩大危害→

上海人崩溃:近期大规模爆发!有人吓得不敢出门,看完头皮发麻…这样做可能扩大危害→

上观新闻
2024-05-28 19:59:48
汪小菲和小梅共同拥有百亿财产,彻底结束和大S的纠缠

汪小菲和小梅共同拥有百亿财产,彻底结束和大S的纠缠

素素娱乐
2024-05-27 11:12:40
她曾是重庆最美的高考状元,如今当上央视主持人,43岁依然单身

她曾是重庆最美的高考状元,如今当上央视主持人,43岁依然单身

吃鱼思故渊
2024-05-27 21:45:42
韩国军队展示无人机群,一次可出动80架,网友:把大疆的标撕了吧

韩国军队展示无人机群,一次可出动80架,网友:把大疆的标撕了吧

笔墨V
2024-05-28 22:09:24
张若昀4部剧霸榜腾讯视频前四,分别为《庆余年》系列和《雪中悍刀行》,腾讯官博:还得是鹅家的张若昀!

张若昀4部剧霸榜腾讯视频前四,分别为《庆余年》系列和《雪中悍刀行》,腾讯官博:还得是鹅家的张若昀!

鲁中晨报
2024-05-28 09:30:06
2024-05-29 15:46:44
编程侠
编程侠
一个爱好厨艺的程序员
28文章数 157关注度
往期回顾 全部

科技要闻

王传福再放狠话,燃油车要成“非主流”

头条要闻

餐馆老板诉民警喝茅台吃野味不付钱 法院:系老板宴请

头条要闻

餐馆老板诉民警喝茅台吃野味不付钱 法院:系老板宴请

体育要闻

巴黎主席向皇马索要8000万 佛爷:1分不给

娱乐要闻

张若昀怎么剧外比剧内更惨兮兮…

财经要闻

东方通收购藏雷 花6亿买来"业绩变脸"

汽车要闻

新哈弗H6苦练内功 向燃油车绝缘智能SAY NO

态度原创

游戏
时尚
教育
本地
军事航空

战术轻度Rogue《Forgotten Mines》预告 7月23日发售

入夏之后,中年女性少穿“一身黑、一身花”,这么搭配不显老

教育要闻

小朋友分糖果,每人分4粒多9粒,每人分5粒少6粒,小朋友有几个?

本地新闻

食味印象|歙县限定!枇杷味儿的清甜初夏

军事要闻

美国一架F-35坠毁 飞行员弹射逃生被送医

无障碍浏览 进入关怀版