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

Springboot微服务学习入门教程

翻翻过去那场雪
关注TA
已关注
手记 191
粉丝 7
获赞 25
概述

Spring Boot 微服务学习入门涵盖了从快速搭建项目到微服务架构的应用,详细介绍了Spring Boot的核心功能和微服务的实现方法,帮助开发者快速掌握Spring Boot微服务开发。

Spring Boot简介
Spring Boot是什么

Spring Boot 是由 Pivotal 团队提供的框架,用于简化新Spring应用的初始搭建及开发过程。Spring Boot使开发者以最少的配置快速构建独立运行的应用程序。它基于Spring框架增加了自动配置的支持,简化了配置过程,使得开发任务更加高效。

Spring Boot的优势
  1. 快速启动:Spring Boot提供大量的默认配置,让开发者能够快速启动应用,减少繁琐的配置工作。
  2. 自包含:Spring Boot可以打包为独立的jar或war文件,通过java -jar命令直接运行,无需部署到应用服务器上。
  3. 自动配置:Spring Boot可以自动配置Spring应用,使得配置过程更加简单。
  4. 依赖管理:Spring Boot提供一系列Starter依赖管理,简化了依赖的引入和管理过程。
  5. 内置Web服务器:Spring Boot内置了Web服务器(如Tomcat、Jetty或Undertow),可以直接运行在开发环境中。
  6. 健康检查:Spring Boot Actuator提供健康检查功能,帮助开发者监控应用的运行状态。
  7. 无代码生成:Spring Boot不需要XML配置,所有配置文件都是通过Java或YAML文件进行。
Spring Boot的主要应用场景
  1. Web应用开发:Spring Boot可用于开发各种Web应用,如RESTful API、静态文件服务等。
  2. 微服务架构:Spring Boot与Spring Cloud结合,可以实现微服务架构,支持服务发现、负载均衡、配置中心等功能。
  3. 命令行应用:Spring Boot可用于开发命令行工具,提供丰富的命令行功能。
  4. 测试工具:Spring Boot提供了一套完整的测试框架,可以用于单元测试、集成测试等。
  5. 数据访问:Spring Boot支持各种数据库操作,如关系型数据库(如MySQL、PostgreSQL)和非关系型数据库(如MongoDB)。
快速搭建Spring Boot项目
创建Spring Boot项目的方法

创建Spring Boot项目的方法包括通过Spring Initializr在线创建、使用IDE(IntelliJ IDEA、Eclipse)创建以及使用命令行工具创建。

使用Spring Initializr在线创建

Spring Initializr是一个在线工具,用于快速创建Spring Boot项目。访问Spring Initializr网站(https://start.spring.io/),选择项目类型、语言、依赖等,点击"Generate"按钮,下载项目压缩包,解压后导入到IDE中进行开发

使用IDE创建

使用IntelliJ IDEA创建

  1. 打开 IntelliJ IDEA,选择 "File" -> "New" -> "Project"。
  2. 在弹出的窗口中选择 "Spring Initializr",点击 "Next"。
  3. 输入项目名称、项目位置等信息,选择语言(Java或Kotlin)、Spring Boot版本。
  4. 添加依赖(如Web、JPA、Thymeleaf等),点击 "Finish" 按钮完成项目的创建。

使用Eclipse创建

  1. 打开 Eclipse,选择 "File" -> "New" -> "Spring Starter Project"。
  2. 输入项目名称、项目位置等信息,选择Spring Boot版本。
  3. 添加依赖(如Web、JPA、Thymeleaf等),点击 "Finish" 按钮完成项目的创建。

使用命令行工具创建

  1. 安装Maven或Gradle。
  2. 打开命令行工具,创建一个新的目录,并进入该目录。
  3. 使用Maven或Gradle创建新的项目。

使用Maven创建

mvn archetype:generate -DgroupId=com.example -DartifactId=springboot-demo -Dversion=0.0.1-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 修改pom.xml文件,添加Spring Boot依赖。
    
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
    </parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</build>

5. 执行`mvn spring-boot:run`命令启动项目。

#### 使用Gradle创建
```shell
gradle init --type java-application --dsl groovy
  1. 修改build.gradle文件,添加Spring Boot依赖。
    
    plugins {
    id 'org.springframework.boot' version '2.3.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    }

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}

5. 执行`gradle bootRun`命令启动项目。

## 初始化项目的基本步骤
1. 创建项目目录结构,如`src/main/java`和`src/main/resources`。
2. 创建`Application.java`文件,作为项目的启动类。
```java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  1. 创建application.propertiesapplication.yml文件,用于配置项目的属性。
    # application.properties
    server.port=8080
    spring.application.name=demo-app
    # application.yml
    server:
    port: 8080
    spring:
    application:
    name: demo-app
  2. 创建Controller类,用于定义RESTful接口。
    
    package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}

5. 运行`DemoApplication`类,启动项目。

# Spring Boot核心概念

## Spring Boot自动配置
Spring Boot自动配置是Spring Boot的核心功能之一。它根据配置文件中的属性,自动配置Spring应用。自动配置通常发生在项目启动时,根据不同的属性值,Spring Boot会自动配置不同的Bean。

### 自动配置的实现原理
Spring Boot自动配置的实现原理是通过`@Conditional`注解来控制Bean的创建。这些注解可以根据不同的属性值控制Bean的创建。例如,`@ConditionalOnClass`注解可以根据类是否存在来控制Bean的创建,`@ConditionalOnProperty`注解可以根据属性值来控制Bean的创建。

### 自动配置的配置过程
1. Spring Boot提供大量的`AutoConfiguration`类,这些类定义了自动配置的逻辑。
2. 在项目启动时,Spring Boot会扫描这些`AutoConfiguration`类。
3. 根据配置文件中的属性,Spring Boot会调用`@Conditional`注解,控制Bean的创建。
4. 如果满足条件,Spring Boot会创建相应的Bean。

### 自动配置的禁用
可以通过`@SpringBootApplication`注解的`exclude`属性来禁用自动配置。例如,可以禁用`DataSourceAutoConfiguration`类的自动配置。
```java
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
Spring Boot Starter依赖管理

Spring Boot Starter是Spring Boot的依赖管理工具,用于简化依赖的引入和管理过程。Spring Boot Starter提供了一系列的依赖管理,使得开发者能够以最少的配置完成依赖的引入和管理。

Spring Boot Starter的工作原理

Spring Boot Starter的工作原理是将一组常用的依赖打包成一个jar文件。开发者只需要引入这个jar文件,就可以引入这组依赖。

Spring Boot Starter的使用方法

  1. 引入Spring Boot Starter依赖。例如,可以引入spring-boot-starter-web依赖来引入Spring Web依赖。
    <!-- pom.xml -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  2. 使用Spring Boot Starter依赖。例如,可以使用@RestController注解来定义RESTful接口。
    
    package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}


## Spring Boot Actuator监控工具
Spring Boot Actuator是Spring Boot的监控工具,提供了健康检查、审计、信息、端点等特性。

### Actuator的功能
1. **健康检查**:提供`/actuator/health`端点,用于检查应用的健康状态。
2. **审计**:提供`/actuator/auditevents`端点,用于审计应用的审计事件。
3. **信息**:提供`/actuator/info`端点,用于获取应用的信息。
4. **端点**:提供`/actuator/metrics`端点,用于获取应用的指标。

### Actuator的配置
1. 引入`spring-boot-starter-actuator`依赖。
```xml
<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 配置Actuator的端点。例如,可以配置management.endpoints.web.exposure.include属性来控制哪些端点可以被访问。
    # application.properties
    management.endpoints.web.exposure.include=health,info
  2. 访问Actuator的端点。例如,可以访问/actuator/health/actuator/info端点来获取应用的健康状态和信息。
    curl http://localhost:8080/actuator/health
    curl http://localhost:8080/actuator/info
创建简单的微服务
微服务的基本概念

微服务是一种架构风格,将一个单一的应用程序拆分成一组小型、独立的微服务,每个微服务运行在自己的进程中,彼此之间通过轻量级的通信协议进行通信。微服务强调独立部署、独立扩展、独立开发、独立维护。

微服务的优势

  1. 独立部署:每个微服务都可以独立部署,降低了部署的复杂性。
  2. 独立扩展:每个微服务都可以独立扩展,提高了系统的可伸缩性。
  3. 独立开发:每个微服务都可以独立开发,提高了开发的效率。
  4. 独立维护:每个微服务都可以独立维护,降低了维护的复杂性。
  5. 服务重用:微服务可以重用,降低了代码的冗余。

微服务的劣势

  1. 开发复杂:微服务的开发需要更多的工具支持,增加了开发的复杂性。
  2. 部署复杂:微服务的部署需要更多的工具支持,增加了部署的复杂性。
  3. 维护复杂:微服务的维护需要更多的工具支持,增加了维护的复杂性。
  4. 服务间通信复杂:微服务之间需要通过通信协议进行通信,增加了服务间通信的复杂性。

微服务的概念实例

一个微服务应用可以分为多个独立的服务,每个服务负责不同的业务逻辑。例如,一个用户服务可以处理用户的注册、登录和信息更新等功能,另一个订单服务可以处理订单的创建、更新和取消等功能。

使用Spring Boot创建RESTful服务

创建RESTful服务的基本步骤

  1. 引入spring-boot-starter-web依赖。
    <!-- pom.xml -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  2. 创建Controller类,用于定义RESTful接口。
    
    package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}

3. 运行`DemoApplication`类,启动项目。

### RESTful服务的配置
1. 配置启动端口。
```properties
# application.properties
server.port=8080
  1. 配置应用名称。
    # application.properties
    spring.application.name=demo-app
  2. 配置服务路径。
    @GetMapping("/api/hello")
    public String hello() {
    return "Hello, World!";
    }
配置微服务的启动参数

配置文件的使用

Spring Boot支持多种配置文件,如application.propertiesapplication.ymlapplication-{profile}.propertiesapplication-{profile}.yml等。可以通过spring.profiles.active属性来激活不同的配置文件。

配置文件的示例

# application.properties
server.port=8080
spring.application.name=demo-app
# application.yml
server:
  port: 8080
spring:
  application:
    name: demo-app
# application-dev.properties
server.port=8081
spring.application.name=demo-dev-app
# application-dev.yml
server:
  port: 8081
spring:
  application:
    name: demo-dev-app

配置文件的激活

可以通过spring.profiles.active属性来激活不同的配置文件。例如,可以在命令行中使用--spring.profiles.active=dev参数来激活application-dev.properties配置文件。

java -jar -Dspring.profiles.active=dev demo-app.jar
微服务间的通信
服务发现与注册

服务发现与注册是微服务架构中的一个重要环节,用于实现服务之间的发现与注册。服务发现与注册可以实现服务之间的动态发现与注册,提高了系统的可伸缩性。

服务发现与注册的实现方式

  1. 服务注册:服务注册是将服务注册到注册中心。注册中心可以是Eureka、Consul、Zookeeper等。
  2. 服务发现:服务发现是服务通过注册中心来发现其他服务。服务发现通常使用Service Registry(服务注册中心)来实现。
  3. 服务调用:服务调用是服务通过发现的服务来调用服务。服务调用通常使用服务调用者来实现。

服务发现与注册的示例

使用Eureka实现服务发现与注册

  1. 引入spring-cloud-starter-netflix-eureka-serverspring-cloud-starter-netflix-eureka-client依赖。
    <!-- pom.xml -->
    <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>
  2. 配置Eureka服务注册中心。
    
    package com.example.demo;

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);
}
}

3. 配置Eureka服务注册中心。
```properties
# application.properties
server.port=8761
spring.application.name=eureka-server
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
  1. 配置Eureka服务注册。
    
    package com.example.demo;

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);
}
}

5. 配置Eureka服务注册。
```properties
# application.properties
server.port=8080
spring.application.name=service-provider
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
使用Spring Cloud Config进行配置管理

Spring Cloud Config是Spring Cloud的配置中心,用于实现配置管理。Spring Cloud Config提供了集中化的配置管理,可以实现配置的动态更新。

Config Server的配置

  1. 引入spring-cloud-starter-config依赖。
    <!-- pom.xml -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
  2. 配置Config Server。
    
    package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

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

3. 配置Config Server。
```properties
# application.properties
server.port=8888
spring.application.name=config-server
spring.cloud.config.server.git.uri=https://github.com/username/repo
spring.cloud.config.server.git.clone-uri=https://github.com/username/repo

Config Client的配置

  1. 引入spring-cloud-starter-config依赖。
    <!-- pom.xml -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
  2. 配置Config Client。
    
    package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

3. 配置Config Client。
```properties
# bootstrap.properties
spring.application.name=service-provider
spring.cloud.config.uri=http://localhost:8888
实现服务间的调用(Feign、RestTemplate)

使用Feign实现服务调用

  1. 引入spring-cloud-starter-openfeign依赖。
    <!-- pom.xml -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
  2. 配置Feign客户端。
    
    package com.example.demo;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient("service-provider")
public interface ServiceClient {
@GetMapping("/api/hello")
String hello();
}


### 使用RestTemplate实现服务调用
1. 引入`spring-boot-starter-web`依赖。
```xml
<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. 配置RestTemplate。
    
    package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

public class DemoApplication {
@Autowired
private RestTemplateBuilder builder;

@Bean
public RestTemplate restTemplate() {
    return builder.build();
}

}

3. 使用RestTemplate实现服务调用。
```java
package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class HelloController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String hello() {
        return restTemplate.getForObject("http://localhost:8080/api/hello", String.class);
    }
}
部署与运行Spring Boot微服务
打包Spring Boot应用

打包方式

Spring Boot支持两种打包方式,分别是jarwarjar打包方式适用于独立运行的应用程序,war打包方式适用于部署到应用服务器的应用程序。

打包步骤

  1. 使用Maven或Gradle打包。

使用Maven打包

mvn clean package
  1. 打包后的jar文件位于target目录下。

使用Gradle打包

./gradlew bootJar
  1. 打包后的jar文件位于build/libs目录下。

打包示例

# Maven打包
mvn clean package

# Gradle打包
./gradlew bootJar
在本地或云平台上部署微服务

在本地部署

  1. 启动本地应用服务器。
    java -jar target/demo-app.jar
  2. 访问服务。
    curl http://localhost:8080/api/hello

在云平台上部署

  1. 将打包后的jar文件上传到云平台。
  2. 在云平台上启动应用。
  3. 访问服务。
使用Docker容器化微服务

Docker容器化微服务的步骤

  1. 创建Dockerfile。
    # Dockerfile
    FROM openjdk:11-jre-slim
    COPY target/demo-app.jar /app/demo-app.jar
    ENTRYPOINT ["java", "-jar", "/app/demo-app.jar"]
  2. 构建Docker镜像。
    docker build -t demo-app:latest .
  3. 运行Docker容器。
    docker run -p 8080:8080 demo-app:latest

Docker容器化微服务的示例

# Dockerfile
FROM openjdk:11-jre-slim
COPY target/demo-app.jar /app/demo-app.jar
ENTRYPOINT ["java", "-jar", "/app/demo-app.jar"]
# 构建Docker镜像
docker build -t demo-app:latest .

# 运行Docker容器
docker run -p 8080:8080 demo-app:latest

通过以上操作,Spring Boot微服务可以被快速搭建、开发、部署和监控。微服务架构的优势也使得Spring Boot微服务更加灵活、可伸缩和可维护。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP