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

Springboot微服务学习:从零开始的入门教程

12345678_0001
关注TA
已关注
手记 240
粉丝 13
获赞 47
概述

本文介绍了Spring Boot微服务学习的基础知识,包括Spring Boot框架的概述、核心概念以及快速搭建Spring Boot项目的步骤。文章还详细讲解了通过Spring Boot实现微服务的方法,并提供了构建简单微服务的实战案例。

Spring Boot简介

Spring Boot是什么

Spring Boot 是一个基于 Spring 框架的开源框架,旨在简化新 Spring 应用的初始搭建以及开发过程。它通过约定优于配置的原则,极大地减少了开发者在配置 Spring 应用时的复杂度。借助 Spring Boot,开发者可以迅速创建独立的、生产级别的基于 Spring 的应用。

Spring Boot的优势

  1. 快速开发:Spring Boot 提供了一系列开箱即用的特性,使得开发者能够快速搭建应用,无需编写大量的配置代码。
  2. 自动配置:Spring Boot 可以自动配置很多常见的场景,比如数据库连接、缓存、日志等。
  3. 嵌入式容器:支持 Tomcat、Jetty、Undertow 等主流的 Web 容器,使得应用可以以独立的可执行 JAR 文件的形式运行。
  4. 生产就绪:Spring Boot 提供了许多与生产环境相关的功能,如健康检查、性能监控等。
  5. 无代码生成:与 Spring 的传统做法不同,Spring Boot 不需要 XML 配置,提倡使用注解来简化配置过程。

Spring Boot的核心概念

  • Spring Boot Starter:Spring Boot Starter 是 Spring Boot 提供的一系列依赖管理的集合,可以大大简化项目依赖的配置。例如,spring-boot-starter-web 包含了创建 Web 应用所需的核心依赖。
  • 自动配置:Spring Boot 通过自动配置来简化配置过程,如使用 @SpringBootApplication 注解可以自动配置很多内容,包括组件扫描、自动配置上下文等。
  • Actuator:Spring Boot Actuator 提供了生产就绪的功能,如健康指标、信息暴露和审计等。
  • Spring Boot CLI:提供了一个命令行工具,可以用来快速创建和运行 Spring Boot 应用。
环境搭建

开发环境的选择

为了开始学习 Spring Boot,你需要选择合适的开发环境。以下是推荐的开发环境配置:

  1. JDK:建议安装 JDK 8 及以上版本。
  2. IDE:推荐使用 IntelliJ IDEA 或 Eclipse,这些 IDE 支持 Spring Boot 的特性,提供了丰富的工具支持。
  3. Spring Boot CLI:可选,但有助于快速创建 Spring Boot 项目。
  4. Maven 或 Gradle:推荐使用 Maven 或 Gradle 作为构建工具。

快速搭建Spring Boot项目

使用 Spring Initializr 快速搭建 Spring Boot 项目是最快捷的方式。Spring Initializr 提供了一个在线工具,帮助开发者快速生成项目结构。以下是操作步骤:

  1. 访问 Spring Initializr
  2. 选择项目的基本信息,如项目名、语言(Java)、依赖等。
  3. 生成项目并下载压缩包。
  4. 解压压缩包,使用 IDE 打开项目。

管理依赖与版本

Spring Boot 使用 Maven 或 Gradle 来管理项目的依赖和版本。以下是一个 Maven 的 pom.xml 示例:

<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>com.example</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>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>
        </plugins>
    </build>
</project>

这个 pom.xml 文件定义了项目的依赖和打包信息。其中,<parent> 标签指定了 Spring Boot 的父 POM,确保了版本的一致性。<dependencies> 标签则列出了项目依赖,这里只添加了 spring-boot-starter-web 依赖,用于创建 Web 应用。

HelloWorld应用

创建第一个Spring Boot应用

创建一个名为 HelloWorldApplication 的 Spring Boot 应用,代码如下:

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 HelloWorldApplication {

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

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

在上面的代码中,@SpringBootApplication 注解包含了 @Configuration@EnableAutoConfiguration@ComponentScan 三个重要的注解,简化了应用的配置。HelloWorldController 类使用了 @RestController 注解,表示该类中的方法都将返回 JSON 格式的响应。hello 方法通过 @GetMapping("/") 注解,监听根路径的 GET 请求,并返回 "Hello, World!"。

运行和调试应用

要运行和调试上面创建的 Spring Boot 应用,可以使用以下几种方式:

  1. IDE 调试:在 IntelliJ IDEA 或 Eclipse 中,直接在 main 方法处添加断点并运行。
  2. 命令行运行:在项目根目录下,使用以下命令运行:
mvn spring-boot:run
  1. 打包并运行:可以将应用打包成可执行的 JAR 文件,然后在命令行运行:
mvn clean package
java -jar target/demo-0.0.1-SNAPSHOT.jar

项目结构解析

Spring Boot 项目的基本结构如下:

src
├── main
│   ├── java
│   │   └── com
│   │       └── example
│   │           └── demo
│   │               └── HelloWorldApplication.java
│   ├── resources
│   │   ├── application.properties
│   │   └── logback-spring.xml
├── test
│   └── java
│       └── com
│           └── example
│               └── demo
│                   └── HelloWorldApplicationTests.java
  • src/main/java:存放 Java 源代码。
  • src/main/resources:存放资源文件,如配置文件 application.properties 和日志配置文件 logback-spring.xml
  • src/test/java:存放测试代码,如单元测试。
Spring Boot微服务基础

微服务的概念

微服务是一种架构风格,通过将一个应用拆分成多个小的、独立的服务来实现应用的模块化。每个服务都在自己的进程中运行,有自己的业务逻辑和数据存储。微服务架构有以下特点:

  1. 服务松耦合:微服务之间通过轻量级的通信机制进行交互。
  2. 服务独立部署:每个服务都可以独立部署和扩展,便于开发和运维。
  3. 技术栈多样化:每个服务可以使用不同的语言和技术栈。
  4. 每个服务都是一个独立的进程:每个服务运行在独立的进程中,互相之间不会相互影响。

Spring Boot实现微服务的方法

Spring Boot 提供了多种工具和框架来支持微服务架构,以下是一些常用的手段:

  1. Spring Cloud:Spring Cloud 是一套基于 Spring Boot 的微服务框架,提供了服务注册与发现、配置中心、服务网关、断路器等核心组件。
  2. Spring Boot Actuator:提供了生产环境中需要的监控和管理功能。
  3. Spring Boot Starter:提供了多种 Starter 依赖来快速搭建微服务应用。

服务发现与注册

服务发现是微服务架构中的一个关键环节,它允许服务在发现并调用其他服务时自动获取其他服务的地址。Spring Cloud 提供了 Eureka 实现服务发现与注册。以下是一个简单的 Eureka 示例:

  1. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 配置 Eureka 服务端
server:
  port: 8761

spring:
 application:
 name: eureka-service

eureka:
 client:
   register-with-eureka: false
   fetch-registry: false
 server:
   enable-self-preservation: false
  1. 启动服务

在服务端应用中,添加 @EnableEurekaServer 注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

实战案例:构建简单的微服务

设计一个简单的微服务

假设我们要构建一个简单的用户管理系统,包含用户信息的增删改查操作。我们先设计一个简单的数据库表结构:

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100)
);

接着,我们可以设计一个简单的服务结构,包括用户服务(User Service)和用户接口(User Interface),使用 Spring Boot 和 Spring Data JPA 进行开发。

实现服务的拆分和组合

首先,创建用户服务模块,配置数据库连接和 Spring Data JPA:

  1. 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>
  1. 配置数据库连接
spring:
  datasource:
  url: jdbc:h2:mem:testdb
  driverClassName: org.h2.Driver
  username: sa
  password:
 jpa:
  hibernate:
    ddl-auto: update
  1. 创建 User 实体类
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String email;

    // getters and setters
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}
  1. 创建 UserRepository 接口
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.demo.User;

public interface UserRepository extends JpaRepository<User, Long> {
}
  1. 创建 UserController 控制器
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userRepository.findById(id).orElse(null);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userRepository.save(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userRepository.deleteById(id);
    }
}

测试微服务的运行

要测试上面创建的服务,可以通过 Postman 或者直接使用浏览器进行请求。以下是几个示例请求:

  1. 创建用户
{
    "name": "John Doe",
    "email": "john.doe@example.com"
}
  1. 获取所有用户
GET http://localhost:8080/users
  1. 获取单个用户
GET http://localhost:8080/users/{id}
  1. 更新用户
{
    "name": "Jane Doe",
    "email": "jane.doe@example.com"
}
  1. 删除用户
DELETE http://localhost:8080/users/{id}
深入理解与进阶

Spring Boot配置管理

Spring Boot 提供了多种配置管理的方式,包括 application.propertiesapplication.yml,可以覆盖默认配置。配置文件放在 src/main/resources 目录下。以下是一些常见的配置属性:

  • 服务器配置

    server:
    port: 8080
    contextPath: /api
  • 数据源配置

    datasource:
    url: jdbc:mysql://localhost:3306/mydb
    driverClassName: com.mysql.jdbc.Driver
    username: root
    password: root
  • JPA 配置

    spring:
    jpa:
      hibernate:
        ddl-auto: update
      show-sql: true

日志管理和监控

Spring Boot 提供了内置的日志管理和监控工具,如 Spring Boot ActuatorSpring Boot Admin

  1. Spring Boot Actuator

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

    默认情况下,Actuator 提供了多个健康检查端点(如 /actuator/health),可以用来监控应用的运行状态。

  2. Spring Boot Admin

    Spring Boot Admin 是一个用来管理 Spring Boot 应用的 Web 应用,提供了更多的监控和管理功能,如应用列表、日志查看、JMX 管理等。

安全与部署

  • Spring Security:Spring Security 提供了强大的安全功能,可以用来保护 Spring Boot 应用的安全。以下是一个简单的 Spring Security 配置示例:

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
              .authorizeRequests()
                  .antMatchers("/", "/home").permitAll()
                  .anyRequest().authenticated()
              .and()
                  .formLogin()
                  .loginPage("/login")
                  .permitAll()
              .and()
                  .logout()
                  .permitAll();
      }
    
      @Bean
      public BCryptPasswordEncoder passwordEncoder() {
          return new BCryptPasswordEncoder();
      }
    }
  • 部署:Spring Boot 应用可以打包成可执行的 JAR 文件,然后在任何支持 Java 的环境中运行。推荐使用 Docker 来进行部署,可以简化部署过程并提供一致的运行环境。

    1. 创建 Dockerfile
    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ADD target/demo-0.0.1-SNAPSHOT.jar app.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    1. 构建 Docker 镜像
    docker build -t my-spring-boot-app .
    1. 运行 Docker 容器
    docker run -p 8080:8080 my-spring-boot-app
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP