为了账号安全,请及时绑定邮箱和手机立即绑定

Springboot微服务学习入门详解

概述

Spring Boot微服务学习入门介绍了Spring Boot的基本概念和优势,包括快速搭建第一个Spring Boot应用的步骤,详细解析了项目的结构和常用功能,同时深入探讨了如何使用Spring Boot进行微服务的实践。

Spring Boot简介

Spring Boot 是一个由 Spring 团队开发的开源框架,它旨在简化使用 Spring 框架开发新应用程序的难度。Spring Boot 可以独立运行,无需部署到容器中,通过使用约定大于配置的原则,使开发过程更为简单。

Spring Boot是什么

Spring Boot 是一套用来简化 Spring 应用初始搭建以及开发过程的工具,它使用特定的方式来进行配置,让开发人员无需编写大量的配置代码。Spring Boot 使得创建独立的、生产级别的基于 Spring 的应用程序变得非常简单。

Spring Boot的优势

  • 开箱即用:Spring Boot 提供了默认配置,使得开发人员可以在开发初期无需过多配置即可启动应用。
  • 无代码干扰:开发人员可以专注于业务逻辑,而不是基础设施的配置。
  • 支持嵌入式服务器:默认集成 Tomcat、Jetty 和 Undertow 作为应用服务器,无需编写额外代码。
  • 自动配置:Spring Boot 能够根据类路径中的依赖自动配置应用程序。
  • 命令行界面:提供了一组命令行工具,方便进行应用的打包和启动。
  • 插件支持:内置了 Maven 和 Gradle 插件,简化了构建过程。
  • 健康检查和监控:提供了健康检查和应用监控的功能,方便了解应用的运行状态。
  • 独立运行:可以通过“jar”或“war”包运行应用程序,无需部署到容器中。

常用的Spring Boot版本与下载

Spring Boot 定期发布新版本,每个版本都有其适用的 Spring 框架版本。例如,Spring Boot 2.7.x 版本兼容 Spring 5.3.x 版本。Spring Boot 最新版本可以到官方网站下载,或者通过 Maven 和 Gradle 仓库获取依赖。

<!-- Maven 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.7.5</version>
</dependency>

<!-- Gradle 依赖 -->
implementation 'org.springframework.boot:spring-boot-starter:2.7.5'
快速搭建第一个Spring Boot应用

本节将详细介绍如何快速搭建一个 Spring Boot 应用。我们将从开发环境配置开始,然后创建一个简单的 Spring Boot 项目,并运行第一个 Spring Boot 应用。

开发环境配置

开发 Spring Boot 应用需要配置开发环境。一般需要安装 Java 开发工具包(JDK)和集成开发环境(IDE)。建议使用 JDK 8 或更高版本。对于 IDE,推荐使用 IntelliJ IDEA 或 Eclipse。

安装 JDK:

# 下载 JDK 安装包
wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz

# 解压安装包
tar -xvf jdk-18_linux-x64_bin.tar.gz
sudo mv jdk-18 /usr/local/java

# 配置环境变量
echo 'export JAVA_HOME=/usr/local/java/jdk-18' >> ~/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc
source ~/.bashrc

# 验证安装
java -version

安装 IDE:

# 安装 IntelliJ IDEA
wget https://download.jetbrains.com/idea/ideaIC-2021.3.3.tar.gz
tar -xvf ideaIC-2021.3.3.tar.gz
sudo mv ideaIC-2021.3.3 /usr/local/idea

echo 'export IDEA_HOME=/usr/local/idea' >> ~/.bashrc
echo 'export PATH=$PATH:$IDEA_HOME/bin' >> ~/.bashrc
source ~/.bashrc

# 启动 IntelliJ IDEA
idea.sh
创建Spring Boot项目

可以通过以下几种方式创建 Spring Boot 项目:

  1. 使用 Spring Initializr:在线创建项目。
  2. 使用 IDE 插件:例如 IntelliJ IDEA 和 Eclipse 都有 Spring Boot 插件。
  3. 手动创建项目:使用 Maven 或 Gradle 创建项目。

下面以 Maven 创建项目为例,手动创建一个简单的 Spring Boot 项目。

创建Spring Boot项目

  1. 创建 Maven 项目
mvn archetype:generate -DgroupId=com.example -DartifactId=spring-boot-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 添加 Spring Boot 依赖

编辑 pom.xml 文件,添加 Spring Boot 依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  1. 创建主类

src/main/java/com/example/springbootdemo 路径下创建主类 Application.java

package com.example.springbootdemo;

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

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

运行第一个Spring Boot应用

运行项目:

mvn spring-boot:run

访问 http://localhost:8080/,应能看到默认的欢迎页面。

Spring Boot项目结构解析

Spring Boot 项目的结构相对简单。一个简单的 Spring Boot 应用通常包括主类、配置文件和资源文件等。本节将详细解析 Spring Boot 项目的结构,包括核心配置文件 application.propertiesapplication.yml,自动装配原理,以及依赖管理。

核心配置文件application.properties/application.yml

Spring Boot 配置文件主要有两种格式:application.propertiesapplication.yml。这些文件用于设置 Spring Boot 应用的各种配置。

application.properties

# server 配置
server.port=8080
server.servlet.context-path=/api

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

application.yml

server:
  port: 8080
servlet:
  context-path: /api

spring:
  datasource:
  url: jdbc:mysql://localhost:3306/mydb
  username: root
  password: root
  driver-class-name: com.mysql.jdbc.Driver
自动装配原理

Spring Boot 通过 @SpringBootApplication 注解自动装配组件。@SpringBootApplication 注解包含了 @Configuration@EnableAutoConfiguration@ComponentScan 三个注解。

  • @Configuration:标记配置类,允许声明 @Bean 方法。
  • @EnableAutoConfiguration:开启自动装配,根据类路径中的依赖,推断并配置 Spring 应用。
  • @ComponentScan:自动扫描并装配标记了 @Component 的类。
依赖管理

Spring Boot 项目使用 Maven 或 Gradle 管理依赖。依赖管理简化了项目依赖配置,自动装配提供了常用的默认配置。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
常用功能介绍

本节将介绍 Spring Boot 中常用的几个功能,包括 RESTful API 的创建、数据库集成(如 JPA 和 MyBatis)、配置文件与属性配置。

RESTful API的创建

创建 RESTful API 可以使用 Spring Boot 提供的 @RestController@Controller 注解。通常使用 @RestController 简化编码。

创建RESTful API

package com.example.springbootdemo;

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, Spring Boot!";
    }
}
数据库集成(JPA、MyBatis等)

Spring Boot 支持多种数据库访问方式,如 JPA、MyBatis 等。这里以 JPA 为例介绍数据库集成。

执行数据库集成

package com.example.springbootdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EntityScan(basePackages = "com.example.springbootdemo.entity")
@EnableJpaRepositories(basePackages = "com.example.springbootdemo.repository")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

创建实体类

package com.example.springbootdemo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

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

    // Getters and Setters
}

创建 Repository 层

package com.example.springbootdemo.repository;

import com.example.springbootdemo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

MyBatis 使用细节

Spring Boot 也可以与 MyBatis 进行集成。下面是一个简单的 MyBatis 配置示例:

  1. 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mybatis</artifactId>
</dependency>
  1. 创建 MyBatis 配置
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
  1. 创建实体类
package com.example.springbootdemo.entity;

public class User {
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}
  1. 创建 Mapper 接口
package com.example.springbootdemo.mapper;

import com.example.springbootdemo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(Long id);
}
配置文件与属性配置

Spring Boot 使用 @Value@ConfigurationProperties 注解配置属性,或者直接在配置文件中设置属性值。

使用@Value注解

package com.example.springbootdemo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class ApplicationProperties {
    @Value("${server.port}")
    private String serverPort;

    public String getServerPort() {
        return serverPort;
    }
}

使用@ConfigurationProperties注解

package com.example.springbootdemo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "server")
public class ServerProperties {
    private String port;
    private String contextPath;

    // Getters and Setters
}
Spring Boot微服务实践

Spring Boot 适合构建微服务架构,这一节将介绍微服务的基本概念,如何使用 Spring Boot 创建微服务,以及服务注册与发现(如使用 Eureka)。

微服务概念简介

微服务是一种将单个应用程序拆分为多个小型、独立服务的方法。每个服务职责单一,通过 API 进行通信。微服务架构可以提高开发和部署速度,提高系统可维护性。

使用Spring Boot创建微服务

Spring Boot 微服务通常使用 REST API 进行通信,通过 Spring Cloud 实现服务注册与发现。

创建微服务项目

  1. 创建项目
mvn archetype:generate -DgroupId=com.example -DartifactId=service-user -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 添加依赖
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
  1. 配置文件
server:
  port: 8081

spring:
  application:
    name: service-user

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  1. 创建主类
package com.example.serviceuser;

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

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

服务注册与发现(如使用Eureka)

Eureka 是 Netflix 开源的一个服务注册与发现组件,用于构建服务发现系统。

创建Eureka Server

  1. 创建项目
mvn archetype:generate -DgroupId=com.example -DartifactId=eureka-server -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 配置文件
server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
instance:
    hostname: localhost

spring:
 application:
    name: eureka-server
  1. 创建主类
package com.example.eurekaserver;

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

运行微服务和Eureka Server

  1. 启动Eureka Server
mvn spring-boot:run
  1. 启动微服务
mvn spring-boot:run
总结与扩展学习
常见问题解答

1. Spring Boot 应用启动慢的原因有哪些?

  • 依赖过多:引入不必要的依赖会增加启动时间。
  • 配置复杂:复杂的配置文件会增加启动时间。
  • 热加载:使用热加载工具(如 Spring Boot DevTools)在开发环境中可以加快启动速度,但在生产环境可能会增加启动时间。

2. 如何解决 Spring Boot 启动时的内存溢出问题?

  • 增加内存设置:通过 JVM 参数 -Xms-Xmx 设置初始堆内存和最大堆内存。
  • 配置文件优化:优化 application.propertiesapplication.yml 中的配置,减少不必要的资源加载。
进阶学习资源推荐

推荐学习网站:慕课网 提供丰富的 Spring Boot 和微服务相关课程,适合不同水平的学习者。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消