SpringCloud教程:新手入门与实践指南
本文详细介绍了SpringCloud教程,涵盖SpringCloud的核心概念、优势和应用场景。通过示例代码展示了如何搭建开发环境和创建简单的SpringCloud应用案例。此外,文章还深入解析了SpringCloud的核心组件,包括服务注册与发现、负载均衡和声明式服务调用。springcloud教程中包含了从入门到实战的全方位指导。
SpringCloud教程:新手入门与实践指南 SpringCloud简介SpringCloud是什么
Spring Cloud 是一组基于 Spring Boot 的框架,用于快速构建分布式系统。它提供了一系列工具和解决方案,帮助开发者更轻松地构建、集成和管理分布式系统中的各种组件和服务。Spring Cloud 的设计目标是简化微服务架构的开发流程,使得开发者能够专注于业务逻辑而不是底层技术细节。
SpringCloud的核心概念
Spring Cloud 依赖于多个核心概念来实现其功能,其中包括:
- 服务注册与发现:通过 Eureka 或 Consul 等服务注册中心来注册和发现服务。
- 负载均衡:使用 Ribbon 或 Zuul 来实现客户端和服务端的请求分发和负载均衡。
- 服务网关:通过 Zuul 或 Spring Cloud Gateway 来实现请求的路由和过滤。
- 配置管理:使用 Config Server 或 Spring Cloud Config 来集中管理和动态更新配置文件。
- 断路器:使用 Hystrix 来实现服务之间的容错处理。
- 服务追踪:通过 Sleuth 和 Zipkin 来实现分布式系统的追踪和监控。
- 消息总线:提供一个分布式消息总线,用于在服务之间传递消息。
示例代码:服务注册与发现
// 以下代码片段展示了如何使用 Eureka 注册一个服务
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ServiceAApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceAApplication.class, args);
}
}
SpringCloud的优势和应用场景
Spring Cloud 的优势包括:
- 简化开发流程:通过提供现成的解决方案和工具,极大地简化了微服务架构的开发流程。
- 高度可配置性:其高度可配置的特性使得开发者可以根据实际需求对各个组件进行灵活配置。
- 丰富的功能支持:除了上述核心功能外,Spring Cloud 还提供了诸如数据访问、缓存、安全等丰富的功能支持。
应用场景包括:
- 微服务架构:适用于需要构建微服务架构的应用,实现系统的模块化和可伸缩性。
- 云原生应用:适用于需要利用云基础设施优势的应用,提高应用的弹性和可伸缩性。
- 企业级应用:适用于需要高可用性、可伸缩性以及高效管理的应用环境。
SpringCloud的环境搭建
要开始使用 Spring Cloud,首先需要搭建开发环境。这里以搭建一个简单的 Spring Boot 环境为例。
搭建步骤
- 安装 JDK 和 Maven:确保你的开发环境中已经安装了 JDK 和 Maven。
- 创建 Spring Boot 项目:可以使用 Spring Initializr 或者 IDEA 等工具创建 Spring Boot 项目。
- 添加依赖:在项目的 pom.xml 文件中添加 Spring Cloud 的相关依赖。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
- 启动 Eureka 服务:创建一个 Eureka 服务注册中心,用于注册和发现服务。
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 注册中心进行注册。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ServiceBApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceBApplication.class, args);
}
}
第一个SpringCloud应用案例
本节将通过创建一个简单的购物车服务来展示如何使用 Spring Cloud 进行服务注册和发现。购物车服务将依赖于一个商品服务来获取商品信息。
服务架构
- 商品服务:提供商品信息的查询接口。
- 购物车服务:提供添加和删除商品到购物车的接口。
商品服务
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class, args);
}
}
购物车服务
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ShoppingCartApplication {
public static void main(String[] args) {
SpringApplication.run(ShoppingCartApplication.class, args);
}
}
SpringCloud核心组件详解
Eureka服务注册与发现
Eureka 是 Spring Cloud 中的服务注册与发现的实现。它能够将服务实例注册到注册中心,同时提供服务的发现和负载均衡功能。
配置 Eureka 服务
spring:
application:
name: eureka-service
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
hostname: localhost
示例代码:服务注册与发现
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ServiceCApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceCApplication.class, args);
}
}
Ribbon负载均衡
Ribbon 是一个基于客户端的负载均衡工具,它可以通过配置文件来指定多个服务地址,并使用轮询、随机、最少连接数等策略来实现服务的负载均衡。
配置 Ribbon
spring:
application:
name: service-a
ribbon:
eureka:
enabled: true
示例代码:Ribbon负载均衡
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
Feign声明式服务调用
Feign 是一个声明式的 Web 服务客户端,它使得编写 Web 服务调用更加简单。Feign 支持多种注解和配置,可以方便地与 Spring Cloud 集成,实现服务间的声明式调用。
配置 Feign
spring:
application:
name: service-b
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
示例代码:Feign声明式服务调用
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = "service-a")
public interface ServiceAClient {
@GetMapping("/greeting")
String greeting(@RequestParam(value = "name") String name);
}
服务的监控与调用链路追踪
在分布式系统中,服务的监控和调用链路追踪是非常重要的。Spring Cloud 提供了 Sleuth 和 Zipkin 来帮助实现这些功能。
配置 Sleuth 和 Zipkin
spring:
sleuth:
sampler:
probability: 1.0
application:
name: service-a
zipkin:
base-url: http://localhost:9411
示例代码:服务追踪
import brave.sampler.Sampler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SleuthConfig {
@Bean
public Sampler defaultSampler() {
return Sampler.ALWAYS_SAMPLE;
}
}
服务的配置与管理
在微服务架构中,服务的配置和管理是非常重要的环节。Spring Cloud 提供了 Spring Cloud Config 和 Spring Cloud Bus 等工具来帮助实现服务的集中配置和动态更新。
配置中心
spring:
application:
name: config-server
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/username/config-repo
cloneOnStart: true
username: your-github-username
password: your-github-token
动态更新配置
import org.springframework.cloud.bus.jackson.BusMessageJackson2Deserializer;
import org.springframework.cloud.bus.jackson.BusMessageJackson2Serializer;
import org.springframework.cloud.bus.jackson.BusPropertiesJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jackson.BusPropertyJackson2Module;
import org.springframework.cloud.bus.jac
共同学习,写下你的评论
评论加载中...
作者其他优质文章