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

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

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

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

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

项目结构如图所示

01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础_第1张图片

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


   4.0.0

   spring.cloud.love.lilei
   demo
   0.0.1-SNAPSHOT
   jar

   demo
   Demo project for Spring Boot

   
      org.springframework.boot
      spring-boot-starter-parent
      1.5.7.RELEASE
       
   

   
      UTF-8
      UTF-8
      1.8
      Dalston.SR3
   

   
      
         org.springframework.cloud
         spring-cloud-starter-eureka
      

      
         org.springframework.boot
         spring-boot-starter-test
         test
      
   

   
      
         
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
         
      
   

   
      
         
            org.springframework.boot
            spring-boot-maven-plugin
         
      
   


其中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
    */
   @Bean
   public 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 {

    //拿到手机
    @Autowired
    private RestTemplate restTemplate;


    @GetMapping("/showLove/{message}")
    public String findById(@PathVariable String message) {
        //给韩梅梅发微信表白得到回应
        return this.restTemplate.getForObject("http://localhost:8001/respond/" + message, String.class);
    }


}

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

项目结构基本类似

01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础_第2张图片

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


   4.0.0

   spring.cloud.love.hanmeimei
   demo
   0.0.1-SNAPSHOT
   jar

   demo
   Demo project for Spring Boot

   
      org.springframework.boot
      spring-boot-starter-parent
      1.5.7.RELEASE
       
   

   
      UTF-8
      UTF-8
      1.8
      Dalston.SR3
   

   
      
         org.springframework.cloud
         spring-cloud-starter-eureka
      

      
         org.springframework.boot
         spring-boot-starter-test
         test
      
   

   
      
         
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
         
      
   

   
      
         
            org.springframework.boot
            spring-boot-maven-plugin
         
      
   


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,所以一定要注意启动类和扫描类的包路径,防止踩坑。当然,会有一些特殊配置等改变此扫描逻辑,这是我们后面要讨论的话题,在此不做赘述!

在浏览器访问李雷应用:

01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础_第3张图片

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

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

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

01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础_第4张图片

给韩梅梅发微信,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基础)