在微服务架构盛行的今天,我们不得不先聊一聊这是个什么鬼。我们来做一个比喻,一个应用好比一个公司,在垂直应用中,就好比我们要做一件事情,所有员工都按照CEO的指挥来做事情。随着公司的发展,事情越来越多,做的也越来越乱,很快遇到瓶颈。那么,微服务架构就代表了,我们把公司拆分成一个个独立的部门,各负其责,公司才能够得以扩大发展。当然,拆分成一个个部门也会引发一系列分布式问题,比如,一个部门和另外一个部门要协同做一件事情,这两个部门做事是有先后顺序的,先做的部门做完了,却没有通知到合作的部门,又或是合作的部门没有做成这件事却没有通知到该部门,此时该部门告诉CEO这个事情已经搞定了(所谓分布式事务的问题)。

目前,市场上主流的基于JVM的分布式架构主要有国内阿里开源的DUBBO和Spring FrameWork的SpringCloud的两种解决方案。十七宝宝目前所在的公司主要基于DUBBO开发,不谈DUBBO,我们的故事从SpringCloud开始。

在上世纪90年代,有两个初中生,李雷和韩梅梅,李雷很喜欢韩梅梅,但是迟迟没有表白。(十七宝宝真没有教人早恋的意思)

1.创建李雷(使用Maven创建):

项目结构如图所示

①pom.xml与application.yml文件配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>spring.cloud.love.lilei</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>demo</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Dalston.SR3</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

其中eureka的配置是下期预告,本篇博客暂时先挖一个坑

application.yml的配置非常简单:

server:port: 8000

②创建LileiApplication用于李雷出生

package spring.cloud.love.lilei;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class LileiApplication {/*** 创建restTemplate用于依赖入注* 相当于给李雷买了一部手机,随时可以拿来给韩梅梅打电话发微信* @return*/@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(LileiApplication.class, args);}
}

要注意此启动类要在项目路径的上层路径

③创建CallHanController用于表白韩梅梅

package spring.cloud.love.lilei.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
public class CallHanController {//拿到手机@Autowiredprivate RestTemplate restTemplate;@GetMapping("/showLove/{message}")public String findById(@PathVariable String message) {//给韩梅梅发微信表白得到回应return this.restTemplate.getForObject("http://localhost:8001/respond/" + message, String.class);}}

2.创建韩梅梅(同样使用Maven创建):

项目结构基本类似

①pom.xml与application.yml文件配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>spring.cloud.love.hanmeimei</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>demo</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Dalston.SR3</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

eureka的配置同样是下期预告,本篇博客暂时先挖一个坑

application.yml:

server:port: 8001

②创建HanmeimeiApplication 用于韩梅梅出生

package spring.cloud.love.hanmeimei;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class HanmeimeiApplication {public static void main(String[] args) {SpringApplication.run(HanmeimeiApplication.class, args);}
}

③创建HanRespondController 用于回应李雷:

package spring.cloud.love.hanmeimei.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HanRespondController {@GetMapping("/respond/{message}")public String respond(@PathVariable String message) {System.out.println("***李雷发微信说:"+message);if(message.equals("I love u")){return "I miss u";}else {return "我要睡觉了,回聊";}}}

通过

HanmeimeiApplication
LileiApplication

启动两个项目,使李雷和韩梅梅出生。

注意:Spring Boot会自动扫描@SpringBootApplication所在类的同级包,以及下级包里的所有bean,所以一定要注意启动类和扫描类的包路径,防止踩坑。当然,会有一些特殊配置等改变此扫描逻辑,这是我们后面要讨论的话题,在此不做赘述!

在浏览器访问李雷应用:

给韩梅梅发微信,明天要去图书馆么

得到回应:我要睡觉了,回聊

说明可以访问韩梅梅的回应服务

给韩梅梅发微信,I love u

得到回应:I miss u

虽然这是十七宝宝在代码里设置如此,但是,这也代表了一个真理,爱,一定要直接一点,勇敢一点。这或许也是十七宝宝至今依旧还是一条单身狗的原因吧。李雷和韩梅梅终于一起愉快的在校园的夕阳下奔跑,而看此博客的你也对基于SpringBoot的应用开发有了一个大概的认识。

本系列博客,大概会持续更新很久很久,希望大家多多关注。

PS:一些知识点与问题解答

1.SpringBoot启动类的扫描路径

Spring Boot会自动扫描@SpringBootApplication所在类的同级包,以及下级包里的所有bean,一定要注意这点哦,因为这点十七宝宝踩了坑啊。

2.那么多的注解怎么记忆

很多是混合注解啦,比如这个

@RestController
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {String value() default "";
}

就是SpringMVC的两个注解的组合啦

多点进去看一下是最佳实践有没有

3.十七宝宝你有没有女朋友

没有,没有,真的没有!为什么问伦家这个问题!好羞涩啊!

转载于:https://my.oschina.net/ruyu/blog/1542813

01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础相关推荐

  1. 【从零开始学微服务】01.微服务的过去与现在

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家. 微服务的历史 再介绍什么是微服务之前,我们先了解一下微服务架构的历史,也就是微服务是如何提出来的. 2011年5月 2011年5月,在威尼 ...

  2. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  3. 01.微服务系列介绍

    微服务系列实践 .NET CORE 在开始之前呢,还是得废话一下,毕竟还是需要介绍一下这个系列我们要实现什么样的一套服务架构,也让大家能初步的有一个了解,后续实践起来也有一个完整的概念,相对也会容易的 ...

  4. 01 微服务和微服务框架 —— SpringCloud

    一.微服务介绍 1. 什么是微服务 在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微".什么是"服务", 微 狭义来讲就 ...

  5. jboss4 迁移_JBoss BPM Travel Agency的微服务迁移故事

    jboss4 迁移 不久前,我们启动了一个规模较大的JBoss Travel Agency演示项目,以展示JBoss BPM Suite的一些更有趣的功能. 我们提供了一系列视频 ,不仅向您展示了如何 ...

  6. JBoss BPM Travel Agency的微服务迁移故事

    不久前,我们启动了一个规模较大的JBoss Travel Agency演示项目,以展示JBoss BPM Suite的一些更有趣的功能. 我们提供了一系列视频 ,不仅向您展示了如何安装它,项目中各种规 ...

  7. Spring Cloud学习 01 微服务基础

    1.Spring Cloud 涉及内容 Spring Boot 框架 Spring Cloud 组件 服务治理(Eureka)-- 服务注册与发现 客户端负载均衡(Ribbon) 微服务容错与降级处理 ...

  8. 设计一个成功的微服务,堪称必备的9个基础知识

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 人体是不同系统的组合,其中大多数系统是独立的,并且作为一个整体协同 ...

  9. JeecgBoot 2.4 微服务正式版发布,基于SpringBoot的低代码平台

    项目介绍 JeecgBoot 是一款基于代码生成器的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Sh ...

最新文章

  1. 关于IBM 随机启动选项
  2. 互联网协议 — Ethernet 局域网技术的发展
  3. Markdown = PPT ?这个工具给力!
  4. Linux中date命令用法及大小比较
  5. PBS_HAS_CHANGED ~ GET_SAP_MENU_INFO
  6. nfs服务器工作原理
  7. Ssh+Mysql实现的Java Web图书商城
  8. android配置网络权限管理,Android 网络权限配置
  9. The JSR-133 Cookbook for Compiler Writers 中英对照版翻译
  10. 让你重新爱上 Windows 的小众软件
  11. android 虚拟按键root,(免root)虚拟按键手动修改方法
  12. 工作流应用 电子表单签核
  13. 一、Oracle数据库的安装和配置
  14. 硬件基础:MOS管工作区间及开通过程分析——以N沟道增强型MOS为例
  15. 搜狗输入法导入本地txt为个人词库
  16. 基于Multisim的四人抢答器设计与仿真
  17. ben we_老WE成立手游战队!2020LOL冬季转会汇总:截止11月17日(每日更新)
  18. 大端(Bid Endian)、小端(Little Endian)含义
  19. 我惟一的能说话的地盘回来了
  20. android开发百度地图定位到几内亚湾问题的解决

热门文章

  1. 账号密码代码php,JS代码怎样实现记住账号密码
  2. 天载在线炒股二次探底行情开启
  3. 用c语言写的新年搞笑祝福程序,新年微信红包搞笑句子_2020新年幽默微信红包祝福语...
  4. 什么是聚类分析?聚类分析方法的类别
  5. NOTE-1-基础笔记: FOV视场角
  6. 悟空蜘蛛池官方为上海联劝公益基金会捐赠5千元
  7. 计算机专业中级工程师论文样本,中级职称专业论文范文
  8. php连接tidb,TiDB常见问题
  9. MEAN实践——LAMP的新时代替代方案(下)
  10. 公共英语和计算机能一起考吗,公共英语(PETS),2020年还会开考吗?