SpringBootLearning && SpringCloudLearning
SpringBoot+微服务学习项目。请根据需要开启依赖。感谢大家的关注、支持和反馈。
http://zhengkai.blog.csdn.net
工程名 | 描述 | 端口 |
---|---|---|
spring-cloud-study-eureka | 服务发现与注册中心 | 8888 |
spring-cloud-study-zuul | 动态转发路由器 | 7777 |
spring-cloud-study-demo | DEMO项目(含websocket,json,不含jpa) | 9999 |
spring-cloud-study-configcenter | 配置中心 | 5555 |
spring-cloud-study-jpa | JPA(hibernate实现) | 4444 |
spring-cloud-study-feign | 微服务远程调用 | 6666 |
spring-cloud-study-redis | 热点数据缓存 | 2222 |
spring-cloud-study-jms | JMS(Java消息服务,ActiveMQ实现) | 1111 |
spring-cloud-study-mybatisplus | mybatisplus(mybatis的加强版) | 3333 |
spring-cloud-study-poi | poi导入 | 8899 |
spring-cloud-study-aop | aop切面编程 | 9998 |
spring-cloud-study-udp | netty实现udp | 9898 |
spring-cloud-study-netty-websocket | netty实现websocket | 6688 |
spring-cloud-study-security | spring-security-demo自定义授权 | 9999 |
spring-cloud-study-security-jwt | spring-security-JWT授权 | 9999 |
spring-cloud-study-elasticsearch | spring-data-elasticsearch,强大的搜索和分析引擎 | 9999 |
spring-cloud-study-drools | drools(jboss rules)强大的业务规则引擎 | 9999 |
spring-cloud-study-logstash | springboot2+logback+logstash+elasticsearch+kibana打造强大的日志收集分析系统 | 9999 |
spring-cloud-study-websocket | springboot2+websocket,整合基于IM的优化版本 | 9999 |
spring-cloud-study-ehcache | springboot2+ehcache,纯java进程缓存框架 | 9999 |
一、运行环境
- 版本:SpringCloud/SpringBoot 2.X
- 环境:JDK8/11
- 编码:UTF-8
- IDE:Spring Tool Suit(STS)/IDEA(推荐)/VSCode with STS(New)
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
二、有关项目启动和配置的说明
- 由于子项目太多,暂时移除所有模块的引用,
请自己根据需要请到父项目的pom.xml启用对应module
- 大部分模块均为
springboot
可独立启动模块,可不依赖eureka注册中心等springcloud组件。 - 如果学习微服务,请请先启动spring-cloud-study-eureka基础模块,因为它是注册中心,大多数微服务必须依赖于它才能实现必要的功能。
- zuul路由中心(后续会升级为ApiGateway),启用spring-cloud-study-zuul,并配置yml文件即可(已经带了一点小配置,可根据实际情况修改)。
- 按需启用spring-cloud-study-demo/spring-cloud-study-configcenter/spring-cloud-study-jpa/spring-cloud-study-feign等等
- 其他模块均不需要eureka等模块,可直接启动
三、使用说明
Eureka
微服务注册中心,SpringCloud全家桶,Netflix版注册中心。这个优先启动,是一切微服务的基础也可以修改配置,进行集群,这里默认单机单例
http://127.0.0.1:8888/eureka | 注册中心 |
Zuul(@Deprecated,应该用ApiGateway了)
API网关/路由,ZUUL是阻塞的,APIGateway是NIO的。
分发方式一,分发搭配/api1,修改yml就可以了,推荐用指定serviceId的
分发方式二,分发路由,直接根据serviceId访问,无需配置
转发的ServiceId是根据项目配置的spring:application:name: spring-cloud-study-demo 来的
http://127.0.0.1:7777/spring-cloud-study-demo/demo/index | 自动分发请求 |
http://127.0.0.1:7777/api2/demo/index | 路由转发请求到配置文件配置的/api2上 |
http://127.0.0.1:7777/api1/demo/socket/222 | 路由转发请求到配置文件配置的/api1上 |
DEMO
正常的访问请求而已,返回json什么的
还支持WebSocket,对WebSocket不懂的可以看我这个文章https://blog.csdn.net/moshowgame/article/details/80275084
http://127.0.0.1:9999/demo/socket/222 | websocket请求页面 |
http://127.0.0.1:9999/demo/index | json数据返回 |
http://127.0.0.1:9999/demosocket/222 | socket请求地址 |
http://127.0.0.1:9999/basepath | 获取微服务路径 |
Configcenter
配置中心,用于读取公共配置文件
http://127.0.0.1:5555/getparam | 获取变量 |
http://127.0.0.1:5555/application/dev | 获取application-dev.yml的变量 |
JPA
JPA是一个标准,Hibernate是实现,实现简单、强大的CRUD功能。已经脱离eureka,需要加入的话自己去掉pom和启动器的eureka相关注释即可。另外,只要数据库连接正常,启动项目可以自动建表,使用init方法可以自动初始化数据,无需自己动数据库
http://127.0.0.1:4444/jpa/user/init/8899 | 初始化8899的用户 |
http://127.0.0.1:4444/jpa/user/roles/8899 | 获取8899用户的角色 |
Feign
Feign用于远程调用微服务,这里用来调用demo的内容,请先启动eureka+demo再启动这个
具体配置可以看我的文章https://blog.csdn.net/moshowgame/article/details/80616624
Redis/SpringCache
Redis 是一个高性能的key-value数据库,广泛应用于互联网业务的缓存,如token池,商品缓存等等热点数据的缓存。
详情请看https://blog.csdn.net/moshowgame/article/details/80792774
【放入缓存】 | http://127.0.0.1:2222/redis/item/2 | {"itemId":2,"itemName":"德玛西亚2"} |
【放入缓存】 | http://127.0.0.1:2222/redis/item/3 | {"itemId":3,"itemName":"德玛西亚3"} |
【读取缓存(可以去RedisDesktopManager看一下,已经有数据了)】 | http://127.0.0.1:2222/redis/item/2 | {"itemId":2,"itemName":"德玛西亚2"} |
【读取缓存(可以去RedisDesktopManager看一下,已经有数据了)】 | http://127.0.0.1:2222/redis/item/3 | {"itemId":3,"itemName":"德玛西亚3"} |
【放入list缓存】 | http://127.0.0.1:2222/redis/item/all | [{"itemId":666,"itemName":"德玛西亚666"},{"itemId":999,"itemName":"德玛西亚999"}] |
【读取list缓存(这是一个空方法,只是因为有了缓存才有数据)】 | http://127.0.0.1:2222/redis/item/all2 | [{"itemId":666,"itemName":"德玛西亚666"},{"itemId":999,"itemName":"德玛西亚999"}] |
【更新缓存】 | http://127.0.0.1:2222/redis/item/2/update | {"itemId":2,"itemName":"德玛西亚XXX2"} |
【重新读取缓存】 | http://127.0.0.1:2222/redis/item/2 | {"itemId":2,"itemName":"德玛西亚XXX2"} |
【EL表达式指定KEY】 | http://127.0.0.1:2222/redis/item/object?itemId=4&itemName=XXXX | 返回结果 {"itemId":4,"itemName":"XXXX"} |
【获取缓存(结果不变还是XXXX不是4444)】 | http://127.0.0.1:2222/redis/item/object?itemId=4&itemName=4444 | 返回结果 {"itemId":4,"itemName":"XXXX"} |
JMS/ActiveMQ
详情请看https://blog.csdn.net/moshowgame/article/details/80836621
发送消息 | http://127.0.0.1:1111/jms/email/send | 控制台显示Received |
Mybatis-Plus 3
Mybatis-Plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段,无入侵全方位 ORM 辅助层让您拥有更多时间陪家人。
详情请看https://blog.csdn.net/moshowgame/article/details/81008485
http://127.0.0.1:3333/mybatisplus/user/init | 数据初始化 |
http://127.0.0.1:3333/mybatisplus/user/find | 通过QueryWarrap构造器查询 |
POI-TL/Word Model
很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单.docx等文件供用户下载打印等。 用Java操作word文档,毫无疑问,当下最流行apache poi,对于poi如何操作word文档,这里不作过多介绍。 这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。 详情请看https://blog.csdn.net/moshowgame/article/details/81702029
http://127.0.0.1:8899/poi/generateWord | 通过Word模板生成Word文件 |
Spring AOP
Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。比如我们最常见的就是日志记录了,不可能每个业务都去加写日志发的功能吧,我们就用切面,将需要记录日志的地方切一下,配置自动记录日志即可。 详情请看https://blog.csdn.net/moshowgame/article/details/85814808
http://127.0.0.1:9998/aop/index | 查看控制台AOP情况 |
Netty-UDP
UDP是用户数据报协议(User Datagrame Protocol,UDP)的简称,主要作用是将网络数据流压缩成数据报的形式,提供面向事务的简单信息传送服务。
具体可以看我的文章https://blog.csdn.net/moshowgame/article/details/88420880
服务端运行方法 | 运行ChineseProverbServer的main方法 |
客户端运行方法 | 运行ChineseProverbClient的main方法 |
Netty-WebSocket
基于Netty的Websocket,稳定性性能秒杀原生。
详情请看https://blog.csdn.net/moshowgame/article/details/91552993
http://127.0.0.1:6688/netty-websocket/index | 运行多个查看结果 |
Spring-Security-Filter
基于spring-security的自定义登录模块。
http://127.0.0.1:9999/security/index | 首页 |
http://127.0.0.1:9999/security/login | 登录页面 |
http://127.0.0.1:9999/security/user/list | 需要授予USER权限访问的页面 |
Spring-Security-JWT
基于spring-security-jwt授权模块。详情请看https://blog.csdn.net/moshowgame/article/details/96476554
http://127.0.0.1:9999/security/auth | 登录接口,json body是{"username":"users","password":"pass"} |
http://127.0.0.1:9999/security/token | 获取Token信息,Header是Authorization:Bearer +Token |
Spring-Data-ElasticSearch
基于spring-boot-starter-data-elasticsearch的搜索和分析引擎模块。详情请看https://blog.csdn.net/moshowgame/article/details/96768494
http://127.0.0.1:9999/es/save | 新增记录 |
http://127.0.0.1:9999/es/search | 搜索记录 |
Springboot2+Drools
Drools是一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,特点就是速度快、效率高。 如果你还在使用复杂的JAVA代码
校验复杂的优惠券/超市打折/计价规则/商品定价/阶梯定价/游戏规则/业务规则
?试试用Drools来解救代码吧,适用但不仅仅包含以上场景。详情请看https://blog.csdn.net/moshowgame/article/details/98061651
http://127.0.0.1:9999/drools/taxi/cal?distanceInMile=18 | 打车18公里 |
http://127.0.0.1:9999/drools/taxi/cal?distanceInMile=2 | 打车2公里 |
http://127.0.0.1:9999/drools/taxi/cal?distanceInMile=3.5 | 打车3.5公里 |
SpringBoot2+Logback+Logstash+ElasticSearch+Kibana
Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。详情请看https://blog.csdn.net/moshowgame/article/details/98851656
http://127.0.0.1:9200 | ElasticSearch查看运行情况 |
http://127.0.0.1:9999/logstash | 输出Log日志 |
http://127.0.0.1:5601/app/kibana | kibana查看日志 |
Websocket IM
基于SpringBoot2+WebSocket,整合了简单IM的优化版,简单明了入门无压力,集群部分未实现(即发送的userId不在当前服务器)
http://127.0.0.1:9999/demo/page | 打开第一个页面,userId=10/toUserId=20 |
http://127.0.0.1:9999/demo/page | 打开第二个页面,userId=20/toUserId=10 |
http://127.0.0.1:9999/demo/push/10?message=moshowCallU | 给对应的用户推送信息 |
EhCache
Ehcache是一个基于标准的开源缓存,可提高性能,减轻数据库负载并简化可伸缩性。 它是最广泛使用的基于Java的缓存,因为它健壮,可靠,功能齐全并与其他流行的库和框架集成。
详情请看https://zhengkai.blog.csdn.net/article/details/109251757
http://localhost:9999/ehcache/cert/find?certId=1&certNumber=111111 | 查询并建立缓存 |
http://localhost:9999/ehcache/cert/find?certId=1 | 查询缓存 |
http://localhost:9999/ehcache/cert/save?certId=1&certNumber=111111 | 清除缓存 |
http://localhost:9999/ehcache/cert/find?certId=1&certNumber=2222 | 重新查询并建立缓存 |
http://localhost:9999/ehcache/cert/find?certId=1 | 再次查询缓存 |
四、版本更新
更新时间 | 更新内容 |
---|---|
20201024(程序员节快乐!) | - 优化部分依赖版本 - 新增ehcache模块,强大的java缓存框架,提供方便快捷的缓存功能 |
20200105 | - 新增SpringBoot2+WebSocket的简单IM优化版,优化连接技术相关内容,目前是单机版,集群版本近期发布。 |
20190810 | - 新增SpringBoot2+Logback+Logstash+ElasticSearch+Kibana打造强大的日志收集分析系统。 |
20190802 | - 新增Spring-Drools业务规则引擎模块。 - 由于子项目太多,暂时移除所有模块的引用,有需要请再父项目的module中启用 - empty为空白项目,可以直接copy出来改一下当新模块使用 新增Travis CI |
20190722 | - 新增Spring-Data-ElasticSearch授权验证模块。 |
20190720 | - 新增SpringSecurity-JWT授权验证模块。 |
20190716 | - 新增SpringSecurity自定义登录模块。 |
20190612 | - 新增基于Netty的WebSocket模块。 |
20190122 | - 新增基于Netty的UDP模块。 |
20190105 | - 新增AOP模块,可以练习AOP功能。 - 更新SpringBoot到2.0.5版本。 - 更新lombok,修复某些JDK不兼容问题 |
20181112 | - 优化mybatis-plus模块的导入,使用mybatis-plus stater简化操作 |
20180815 | - 新增POI-TL模块,POI根据Word模板输出文件 |
20180711 | - 新增MybatisPlus3.0模块,比Mybatis更简单爆炸 |
20180627 | - 新增JMS模块,ActiveMQ实现,订阅/消费 |
20180624 | - 新增Redis模块,完美集成SpringCache |
20180609 | - 新增Feign模块,MicroService之间相互调用 - 优化说明 |
20180603 | - 新增JPA模块,Hibernate实现,基于实体,简单CRUD - 优化调整 |
20180602 | - 优化调整 - 新增configcenter模块,集中式配置管理 |