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

本文通过李雷和韩梅梅的故事,介绍了如何使用Spring Boot搭建简单的微服务架构,并实现服务间的调用。从创建项目、配置文件到启动类及控制器的具体实现进行了详细讲解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

项目结构如图所示

203706_WL5H_2949790.png

①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
    */
   @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创建):

项目结构基本类似

204344_yLKj_2949790.png

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

在浏览器访问李雷应用:

205619_BqKD_2949790.png

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

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

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

205727_6ei9_2949790.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值