框架用多了真的会死人的,spring-cloud全家桶与mybatis 集成完整示例(附下载)

封面

题外话:

看到这一长串包含各种技术名词的标题,一路走来感觉研发深深的被各种框架给绑架了,从我们刚出生最简单的jsp,servlet打天下,到spring mvc的盛行,再到现在spring-boot,spring-cloud全家桶,还有各种前端框架什么vue,React,Angular,requerjs,还有什么大数据的框架就不说了等等。怎么也有快100种了吧。我学不学是我的兴趣,但是你换个公司就得面对新的框架的要求,想想都累,但是那些企业招聘的内容上,谁不写这些东西!!!

说到底,技术负责人所谓的随大流就是一种资源的浪费,浪费公司成本,浪费员工学习时间,而底层的能力那些技术负责人他真的会么?

个人对框架的理解:

1、任何框架首先是为了解决实际的业务发展问题。而不是凑热闹。

2、框架是随着团队以及业务的发展长期沉淀出来的,最终核心是为业务开发做基础支撑,是去提高开发效率,适应业务发展。而不是来一个项目我就整一个框架,看谁整的新鲜。

3、能做减法做减法,任何时候添加一个技术组件,直接的结果就是增加学习成本以及造成可能运行期故障。

4、只要业务能跑的好,能单级不集群,能一个war,决不搞微服务拆分和前后端分离。

5、重构不是换新。

6、框架并不代表能力,支撑大业务量的运行以及减少研发成本才是本事。

7、技术人员了解一下前言框架的设计思想也是极好的。

8、不要和产品经理打完架,然后再前后端打架。

9、头发更重要。

10、以后再有哪个技术经理说你连spring-cloud都不会,你就问他你知道byte的取值范围是多少么,80%肯定不知道。

~题外话完~


有小伙伴想让发个spring-cloud的代码实例研究一下,所以就抽业务时间写了一个。也就是那些东西,网上也一大堆文章了。不喜欢看过程的直接去结尾下载源码吧。

spring cloud的这几个组件的调用关系:

调用关系

其中:

1、euraka为服务注册及状态监控组件,其他微服务都注册到这上面。它还提供一个监控web界面。euraka可以用zookeeper替换,但是需要安装zookeeper。这些服务一般都在内网,不直接对外调用,要调用走zuul。

2、zuul,提供服务调用网关,类似于ngnix,提供服务跳转,映射,黑白名单等等。所实话,走ngnix其实就够了了。

3、feign:服务调用的封装,直接帮你把服务的查找,请求和返回结果给你包装好了,你只需要关注输入和输出结果就行。

当然spring-cloud还有很多其他的组件,什么自动配置,bus等可以自己研究。who care!

本实例主要业务逻辑是:

在user-manager工程中查询用户基本信息,然后根据id去日志服务(log-service)去查询用户操作日志。

本示例代码对应工程:

工程结构


具体在ide中的代码如下:

代码结构

其中:user-manager里面集成了mybitais,无配置文件的方式实现了一个简单查询。主要是为了演示集成的过程。

先介绍下sping-cloud的几个常用的注解(annotation):

@EnableEurekaServe:用于标注我是一个Eureka注册中心;

@EnableEurekaClient:用于标注我是一个服务,用于注册到Eureka注册中心;

@EnableZuulProxy:用于标注我是一个zuul服务网关;

@EnableFeignClients 用于标注我要使用Feign来调用服务,默认会启动ribbon来做服务的负载调用;

@EnableHystrix 用于标注启动了服务降级机制(容错机制)和@EnableFeignClients 一起使用。

对应各个注解在工程工程中的使用位置:

注解用在的地方

整个工程用到了spring-boot,也就是各种starter,推荐阅读另一篇文章:spring-boot相关示例

当然spring-boot就是一推基于maven模块化的封装,所以也推荐阅读另一篇文章:「干货分享」模块化编程及Maven配置最佳实践之一

那么都用到哪些starter:

1、Eureka服务注册中心的starter:

spring-cloud-starter-netflix-eureka-server

2、eureka客户端,也就是微服务,是要注册到Eureka服务注册中心的

spring-cloud-starter-netflix-eureka-client

3、zuul网关,当然需要配合spring-cloud-starter-netflix-eureka-client一起,因为他也是要作为一个服务注册到服务中心的。

spring-cloud-starter-netflix-zuul

4、feign和hystrix的starter

spring-cloud-starter-netflix-hystrix

spring-cloud-starter-openfeign

5、mybatis的starter

mybatis-spring-boot-starter

各种starter在工程中使用的对应关系:


starter对应关系


具体的maven配置看代码吧。上图已经基本说清楚了,就不粘贴大段代码了。

端口说明

先说一下这几个工程端口使用说明,方便大家理解接口关系:

端口关系

配置文件YML说明

话说yml这种树形结构不一定适合所有人,一是占用篇幅太长,二是这种手动对齐方式很容易出错,出了错你找都不好找。感觉能properties还是用回去吧。

1、Eureka服务中心,工程:services-center:

#服务端口号

server:

  port: 8200

#服务名称

spring:

  application:

    name: service-eureka-center #服务中心自己本身也是个服务,也需要起个名字

  security:

    basic:

      enable: true #开启基于HTTP basic的认证,可以不要,从安全考虑还是需要。

    user:

      name: test

      password: 123456

eureka:

  instance:

    hostname: 127.0.0.1

#注册地址,另一个集群的地址。

  client:

    serviceUrl:

      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:8300/eureka/

#是否将自己注册到Eureka服务中,集群的时候为true,非集群是为false

    register-with-eureka: true

#是否从Eureka中获取注册信息,集群的时候为true,非集群是为false

    fetch-registry: true

微服务的配置文件,对应工程:log-service

#服务端口号

server:

  port: 8101

#服务名称

spring:

  application:

    name: log-service

eureka:

  instance:

    #注册中心地址

    hostname: 127.0.0.1

#客户端调用地址

  client:

    serviceUrl:

#此处的用户名密码和服务中心配置文件里面的一样

      defaultZone:  http://test:123456@${eureka.instance.hostname}:8200/eureka/

#因为应用为服务提供者,需要注册到注册中心

    register-with-eureka: true

#是否需要从eureka上检索服务

    fetch-registry: true

网关的配置文件,对应工程:services-gateway

server:

  port: 8080 #服务端口

spring:

  application:

    name: service-zuul-gateway #指定服务名

###服务注册到eureka注册中心的地址

eureka:

  client:

    service-url:

          defaultZone: http://test:123456@127.0.0.1:8200/eureka/

#由于需要被查找到用于调用,所以需要注册到注册中心

    register-with-eureka: true

#是否需要从eureka上检索服务

    fetch-registry: true

zuul:

  routes: #定义服务转发规则

    log-s: #路由名称

      path: /log-service/** #匹配log-service开头的请求到log-service服务

      serviceid: log-service

关于zuul的路由规则有很多,这里不详细一一说明了。大家去查资料脑补。

调用程序配置文件:对应工程:user-manager

里面有mybatis的数据源的配置。

#服务端口号

server:

  port: 8110

#服务名称

spring:

  #数据库数据源

  datasource:

    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC

    username: root

    password: root

    driver-class-name: com.mysql.jdbc.Driver

    #连接池配置

    type: com.alibaba.druid.pool.DruidDataSource

    initialSize: 1

    minIdle: 3

    maxActive: 20

eureka:

  instance:

    #注册中心地址

    hostname: 127.0.0.1

#客户端调用地址

  client:

    serviceUrl:

      defaultZone: http://test:123456@${eureka.instance.hostname}:8200/eureka/

#因为该应用为服务调用者,不注册

    register-with-eureka: false

#是否需要从eureka上检索服务

    fetch-registry: true

部分代码解释:

user-manager工程:

mybtatis部分:

出了上面配置文件中指明数据源的配置外,然后就是在启动时加上各种mapper的扫描位置:


我这里写了一个简单的mapper,用于根据用户id查询用户信息和,具体如下:


数据表的脚本:

CREATE TABLE `tab_user` (

  `id` varchar(32) DEFAULT NULL,

  `username` varchar(255) DEFAULT NULL

)

数据查询和服务调用过程:

itemFeignClient代码:

因为都是通过网关访问,所以这里面所有的配置都是基于网关的信息。

调用配置

其他几个工程的代码相对就很简单了,主要是注解配置上直接启动即可,具体大家看代码吧。

工程启动之后(顺序:服务中心services-center->微服务log-service->网关services-gateway->调用程序user-manager),访问测试结果,如果成功后如下:

eureka注册中心显示结果:


服务情况

通过浏览器访问user-manager的controller之后返回正确结果(这里用了一个google浏览器的json美化插件json-handle):


显示结果

很多组件还有一些配置细节,感兴趣大家可以多查资料了解一下,使用用的话还是有很多配置优化的地方。

说实话写了一身汗!!!

这几个组件的中式读法,自己整的,不一定准确:

ribbon 瑞本

Hystrix    嗨司最克斯

eureka  尤瑞克

zuul  走欧

feign  奋

~以上便是本次分享所有内容~

过程中有问题可以留言一起讨论。谢谢!

源码下载

为防止地址失效,所有下载链接都在公众号维护(公众号文章发布之后就不能改连接了),请关注公众号后,回复“R005” 获取完整源码。

公众号
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353