01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础
在微服务架构盛行的今天,我们不得不先聊一聊这是个什么鬼。我们来做一个比喻,一个应用好比一个公司,在垂直应用中,就好比我们要做一件事情,所有员工都按照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基础相关推荐
- 【从零开始学微服务】01.微服务的过去与现在
大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家. 微服务的历史 再介绍什么是微服务之前,我们先了解一下微服务架构的历史,也就是微服务是如何提出来的. 2011年5月 2011年5月,在威尼 ...
- 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...
- 01.微服务系列介绍
微服务系列实践 .NET CORE 在开始之前呢,还是得废话一下,毕竟还是需要介绍一下这个系列我们要实现什么样的一套服务架构,也让大家能初步的有一个了解,后续实践起来也有一个完整的概念,相对也会容易的 ...
- 01 微服务和微服务框架 —— SpringCloud
一.微服务介绍 1. 什么是微服务 在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微".什么是"服务", 微 狭义来讲就 ...
- jboss4 迁移_JBoss BPM Travel Agency的微服务迁移故事
jboss4 迁移 不久前,我们启动了一个规模较大的JBoss Travel Agency演示项目,以展示JBoss BPM Suite的一些更有趣的功能. 我们提供了一系列视频 ,不仅向您展示了如何 ...
- JBoss BPM Travel Agency的微服务迁移故事
不久前,我们启动了一个规模较大的JBoss Travel Agency演示项目,以展示JBoss BPM Suite的一些更有趣的功能. 我们提供了一系列视频 ,不仅向您展示了如何安装它,项目中各种规 ...
- Spring Cloud学习 01 微服务基础
1.Spring Cloud 涉及内容 Spring Boot 框架 Spring Cloud 组件 服务治理(Eureka)-- 服务注册与发现 客户端负载均衡(Ribbon) 微服务容错与降级处理 ...
- 设计一个成功的微服务,堪称必备的9个基础知识
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 人体是不同系统的组合,其中大多数系统是独立的,并且作为一个整体协同 ...
- JeecgBoot 2.4 微服务正式版发布,基于SpringBoot的低代码平台
项目介绍 JeecgBoot 是一款基于代码生成器的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Sh ...
最新文章
- 关于IBM 随机启动选项
- 互联网协议 — Ethernet 局域网技术的发展
- Markdown = PPT ?这个工具给力!
- Linux中date命令用法及大小比较
- PBS_HAS_CHANGED ~ GET_SAP_MENU_INFO
- nfs服务器工作原理
- Ssh+Mysql实现的Java Web图书商城
- android配置网络权限管理,Android 网络权限配置
- The JSR-133 Cookbook for Compiler Writers 中英对照版翻译
- 让你重新爱上 Windows 的小众软件
- android 虚拟按键root,(免root)虚拟按键手动修改方法
- 工作流应用 电子表单签核
- 一、Oracle数据库的安装和配置
- 硬件基础:MOS管工作区间及开通过程分析——以N沟道增强型MOS为例
- 搜狗输入法导入本地txt为个人词库
- 基于Multisim的四人抢答器设计与仿真
- ben we_老WE成立手游战队!2020LOL冬季转会汇总:截止11月17日(每日更新)
- 大端(Bid Endian)、小端(Little Endian)含义
- 我惟一的能说话的地盘回来了
- android开发百度地图定位到几内亚湾问题的解决
热门文章
- 账号密码代码php,JS代码怎样实现记住账号密码
- 天载在线炒股二次探底行情开启
- 用c语言写的新年搞笑祝福程序,新年微信红包搞笑句子_2020新年幽默微信红包祝福语...
- 什么是聚类分析?聚类分析方法的类别
- NOTE-1-基础笔记: FOV视场角
- 悟空蜘蛛池官方为上海联劝公益基金会捐赠5千元
- 计算机专业中级工程师论文样本,中级职称专业论文范文
- php连接tidb,TiDB常见问题
- MEAN实践——LAMP的新时代替代方案(下)
- 公共英语和计算机能一起考吗,公共英语(PETS),2020年还会开考吗?