继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Spring Boot微服务入门教程

函数式编程
关注TA
已关注
手记 200
粉丝 14
获赞 30
概述

本文介绍了如何使用Spring Boot快速搭建微服务入门应用,涵盖Spring Boot的基本概念和优势,详细讲解微服务架构的特点以及如何在Spring Boot项目中实现微服务的搭建和配置。

Spring Boot 简介
Spring Boot 是什么

Spring Boot 是一个基于 Spring 框架的开发工具,旨在简化新 Spring 应用的初始搭建以及开发过程。它通过约定优于配置的原则,帮助开发者快速创建独立的、生产级别的应用。Spring Boot 专注于简化配置,并提供了一系列脚手架代码,使得开发者能够更快地实现功能。

Spring Boot 的优势
  1. 简化配置:Spring Boot 消除了许多繁重的 XML 配置。它使用约定优于配置的原则,从而大大减少了代码量。
  2. 自动配置:Spring Boot 能够自动配置 Spring 应用,利用默认值来简化开发。
  3. 打包便捷:Spring Boot 可以将应用打包成独立的可执行的 jar 文件,便于部署。
  4. 内嵌服务器:Spring Boot 可以内嵌 Tomcat、Jetty 或者 Undertow 服务器,无需部署到外部容器。
  5. 健康检查:Spring Boot 提供了监控和健康检查功能,使应用更加健壮。
Spring Boot 的适用场景
  1. 快速开发:适用于需要快速开发的项目,如原型系统或者小规模应用。
  2. 微服务架构:非常适合构建微服务架构下的应用,可以快速搭建服务并进行部署。
  3. 自包含应用:适用于需要独立运行的应用,不需要依赖外部容器。
  4. 持续集成/持续部署:适用于 CI/CD 流程中的快速构建和部署。
微服务基础
微服务的概念

微服务是一种架构风格,它将一个大应用拆分成一系列小的、松耦合的服务。每个服务能够独立开发、部署和扩展。这些服务通常通过 HTTP REST API 或者消息队列进行通信。

微服务与传统单体应用的区别
  • 独立部署:微服务可以独立部署,而单体应用通常需要整体部署。
  • 独立扩展:微服务可以根据服务的负载独立扩展,而单体应用只能整体扩展。
  • 独立开发:微服务可以独立开发、测试和部署,而单体应用通常需要整个应用进行重构和重新部署。
  • 松耦合:微服务之间通过 API 调用,保持较低的耦合度;单体应用中的组件通常紧密耦合。
微服务架构的优势
  1. 独立扩展:每个微服务可以根据实际需求独立扩展,提高系统灵活性。
  2. 容错性:单个服务出现故障不会影响整个系统,提高了系统容错性。
  3. 易于维护:每个服务独立维护,简化了维护流程。
  4. 快速部署:服务独立部署,加快了部署速度。
  5. 技术栈多样化:不同的服务可以采用不同的技术栈,提高了灵活性。
Spring Boot 微服务搭建
创建 Spring Boot 项目

创建一个新的 Spring Boot 项目,可以使用 Spring Initializr(官方网站提供)或者 IDE 插件。例如,使用 IntelliJ IDEA 创建一个 Spring Boot 项目。

  1. 在 IntelliJ IDEA 中选择 File -> New -> Spring Initializr Project
  2. 选择 Java 作为语言。
  3. 输入项目名称,例如 my-spring-boot-app
  4. 选择 Spring Boot 版本。
  5. 选择依赖项,如 Spring WebSpring Data JPA 等。
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2000/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>com.example</groupId>
    <artifactId>my-spring-boot-app</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
    </dependencies>
</project>
配置 Spring Boot 项目

Spring Boot 使用 application.propertiesapplication.yml 文件进行配置。配置文件通常位于 src/main/resources 目录下。

# application.properties
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
添加微服务相关依赖

为了构建微服务,通常需要添加一些依赖,如 spring-cloud-starter-netflix-eureka-clientspring-cloud-starter-netflix-eureka-server

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Spring Boot 微服务实践
创建 RESTful 服务

使用 Spring Boot 创建 RESTful 服务,可以利用 @SpringBootApplication@RestController 注解。

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@RestController
public class GreetingController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
}
服务发现与注册

在微服务架构中,服务发现是至关重要的。Spring Cloud 提供了 Eureka 作为服务发现和注册中心。

  1. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 配置 Eureka 服务器和客户端
# Eureka server
spring.application.name=eureka-server
server.port=8761
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.server.enable-self-preservation=false

# Eureka client
spring.application.name=my-service
server.port=8080
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
  1. 启动 Eureka 服务器
package com.example.eureka.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
  1. 启动 Eureka 客户端
package com.example.eureka.client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}
服务间通信

在微服务架构中,服务间通信是常见的需求。Spring Cloud 提供了 RibbonFeign 用于服务间通信。

  1. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 配置 Ribbon 客户端
spring.application.name=my-client
server.port=8081
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
  1. 使用 Ribbon 进行服务调用
package com.example.ribbontest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.FeignClientConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

@SpringBootApplication
public class RibbonTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(RibbonTestApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/call-service")
    public String callService() {
        return restTemplate.getForObject("http://my-service/hello", String.class);
    }
}
  1. 使用 Feign 进行服务调用
package com.example.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(value = "my-service")
public interface ServiceClient {
    @GetMapping("/hello")
    String hello();
}
Spring Boot 微服务部署
本地部署 Spring Boot 微服务
  1. 打包 Spring Boot 应用
mvn clean package
  1. 运行打包后的 jar 文件
java -jar target/my-spring-boot-app-0.0.1-SNAPSHOT.jar
使用 Docker 部署 Spring Boot 微服务
  1. 编写 Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  1. 构建 Docker 镜像
docker build -t my-spring-boot-app .
  1. 运行 Docker 容器
docker run -d -p 8080:8080 --name my-spring-boot-app my-spring-boot-app
部署到云平台

部署到云平台通常需要使用云平台提供的工具和服务,例如 AWS、Azure 或者阿里云。以下是一个使用 AWS Elastic Beanstalk 部署的简要步骤:

  1. 创建 Elastic Beanstalk 应用
  2. 上传 WAR 或 JAR 文件
  3. 配置环境设置
  4. 启动环境

具体的部署步骤和配置可以根据云平台的官方文档进行。

总结与后续学习建议
微服务最佳实践
  1. 服务拆分:合理拆分服务,避免服务过大。
  2. 服务通信:使用 REST API 进行服务间通信。
  3. 服务注册与发现:使用 Eureka 进行服务注册和发现。
  4. 配置管理:使用 Spring Cloud Config 进行配置管理。
  5. 监控与日志:使用 Zipkin 或者 Sleuth 进行服务跟踪,使用 ELK Stack 进行日志管理。
  6. 安全性:确保服务的安全性,使用 OAuth2、JWT 等进行身份验证。
推荐的进一步学习资源
  1. 在线课程慕课网提供了许多关于 Spring Boot 和微服务的课程。
  2. 官方文档:Spring Boot 和 Spring Cloud 的官方文档提供了详细的指南。
  3. 视频教程:YouTube 和 Bilibili 上有不少关于微服务架构的视频教程。
  4. 书籍:虽然不推荐具体书籍,但可以参考一些针对 Spring Boot 和微服务架构的书籍。
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP