本文介绍了如何使用Spring Boot快速搭建微服务入门应用,涵盖Spring Boot的基本概念和优势,详细讲解微服务架构的特点以及如何在Spring Boot项目中实现微服务的搭建和配置。
Spring Boot 是一个基于 Spring 框架的开发工具,旨在简化新 Spring 应用的初始搭建以及开发过程。它通过约定优于配置的原则,帮助开发者快速创建独立的、生产级别的应用。Spring Boot 专注于简化配置,并提供了一系列脚手架代码,使得开发者能够更快地实现功能。
微服务是一种架构风格,它将一个大应用拆分成一系列小的、松耦合的服务。每个服务能够独立开发、部署和扩展。这些服务通常通过 HTTP REST API 或者消息队列进行通信。
创建一个新的 Spring Boot 项目,可以使用 Spring Initializr(官方网站提供)或者 IDE 插件。例如,使用 IntelliJ IDEA 创建一个 Spring Boot 项目。
File -> New -> Spring Initializr Project
。my-spring-boot-app
。Spring Web
、Spring 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 使用 application.properties
或 application.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-client
和 spring-cloud-starter-netflix-eureka-server
。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
使用 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 作为服务发现和注册中心。
<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>
# 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/
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); } }
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 提供了 Ribbon
和 Feign
用于服务间通信。
<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>
spring.application.name=my-client server.port=8081 eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
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); } }
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(); }
mvn clean package
java -jar target/my-spring-boot-app-0.0.1-SNAPSHOT.jar
FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t my-spring-boot-app .
docker run -d -p 8080:8080 --name my-spring-boot-app my-spring-boot-app
部署到云平台通常需要使用云平台提供的工具和服务,例如 AWS、Azure 或者阿里云。以下是一个使用 AWS Elastic Beanstalk 部署的简要步骤:
具体的部署步骤和配置可以根据云平台的官方文档进行。