要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。
接着上篇看过的guide60,接着往下看。
guide61、Vault Configuration
简单就是启动 Vault,将配置属性存储在 Vault 中,构建 Spring 应用程序并将其与 Vault 连接。
首先是安装和启动vault,这边直接启动
Vault 是一个数据管理系统,允许您存储静态加密的敏感数据。
它非常适合存储敏感的配置详细信息,例如密码、加密密钥、API 密钥。
设置两个环境变量以将 Vault CLI 指向 Vault 端点并提供身份验证令牌。并在Vault 中存储配置键值对
定义配置类:
@ConfigurationProperties("example")
public class MyConfiguration {
private String username;
private String password;
... ...
@ConfigurationProperties是一个Spring Boot注解,用于将外部配置属性绑定到Java Bean中。通过在Java Bean的属性上添加@ConfigurationProperties注解,Spring Boot将自动加载配置文件中的属性值,并将其绑定到Java Bean中。这样,我们就可以像访问Java Bean的其他属性一样访问外部配置属性。@ConfigurationProperties注解还支持类型安全的属性绑定,可以自动转换属性值的类型。
@ConfigurationProperties(“example”)注解表示将外部配置属性绑定到一个名为"example"的Java Bean中。这意味着Spring Boot将尝试加载以"example"为前缀的所有属性,并将它们绑定到该Java Bean中。
配置应用程序参数:
spring.application.name=gs-vault-config
spring.cloud.vault.token=00000000-0000-0000-0000-000000000000
spring.cloud.vault.scheme=http
spring.cloud.vault.kv.enabled=true
spring.config.import: vault://
允许从Vault导入配置。最后创建一个启动类:
@SpringBootApplication
@EnableConfigurationProperties(MyConfiguration.class)public class Application implements CommandLineRunner {
private final MyConfiguration configuration;
public Application(MyConfiguration configuration) {
this.configuration = configuration;
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) {
Logger logger = LoggerFactory.getLogger(Application.class);
logger.info("----------------------------------------");
logger.info("Configuration properties");
logger.info(" example.username is {}", configuration.getUsername());
logger.info(" example.password is {}", configuration.getPassword());
logger.info("----------------------------------------");
}}
启动结果:
guide62、Deploying a Spring Boot app to Azure
Azure Spring Apps是一个在Azure云上运行Spring Boot应用程序的托管服务,由Microsoft Azure和VMware合作推出。Azure Spring Apps提供了一个全面的解决方案,帮助开发人员将Spring Boot应用程序轻松部署到Azure云上,并提供一系列功能和工具来监视、保护和扩展应用程序。Azure Spring Apps支持多种应用程序类型,包括Java Web应用程序、REST API、事件驱动的微服务和批处理作业等。它还支持多种数据库和消息传递服务,如MySQL、PostgreSQL、Redis和RabbitMQ等。Azure Spring Apps还提供了与Azure DevOps、GitHub和Jenkins等持续集成/持续交付工具的集成,以便快速、可靠地构建和部署Spring Boot应用程序。
仅了解。
guide63、Client-Side Load-Balancing with Spring Cloud LoadBalancer
构建一个微服务应用程序,该应用程序使用 Spring Cloud LoadBalancer 在对另一个微服务的调用中提供客户端负载平衡。
本guide要构建两个微服务,首先创建一个顶层父项目,再去分别创建sayHello和user两个微服务。
1、其中sayHello服务中导入spring web依赖,并且提供服务:
@RestController
@SpringBootApplication
public class SayHelloApplication {
private static Logger log = LoggerFactory.getLogger(SayHelloApplication.class);
public static void main(String[] args) {
SpringApplication.run(SayHelloApplication.class, args);
}
@GetMapping("/greeting")
public String greet() {
log.info("Access /greeting");
List<String> greetings = Arrays.asList("Hi there", "Greetings", "Salutations");
Random rand = new Random();
int randomNum = rand.nextInt(greetings.size());
return greetings.get(randomNum);
}
@GetMapping("/")
public String home() {
log.info("Access /");
return "Hi!";
}
}
比较简单,就是提供一个端点,返回随机问候语(从三个静态列表中挑选出来)。
并且在配置文件里配置参数, 因为要测试负载均衡,所以根据不同port,启动3个服务实例:
spring.application.name=say-hello
server.port=8090/9092/9999
2、再创建客户端服务user
@SpringBootApplication
@RestController
public class UserApplication {
private final WebClient.Builder loadBalancedWebClientBuilder;
private final ReactorLoadBalancerExchangeFilterFunction lbFunction;
public UserApplication(WebClient.Builder webClientBuilder,
ReactorLoadBalancerExchangeFilterFunction lbFunction) {
this.loadBalancedWebClientBuilder = webClientBuilder;
this.lbFunction = lbFunction;
}
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
@RequestMapping("/hi")
public Mono<String> hi(@RequestParam(value = "name", defaultValue = "Mary") String name) {
return loadBalancedWebClientBuilder.build().get().uri("http://say-hello/greeting")
.retrieve().bodyToMono(String.class)
.map(greeting -> String.format("%s, %s!", greeting, name));
}
@RequestMapping("/hello")
public Mono<String> hello(@RequestParam(value = "name", defaultValue = "John") String name) {
return WebClient.builder()
.filter(lbFunction)
.build().get().uri("http://say-hello/greeting")
.retrieve().bodyToMono(String.class)
.map(greeting -> String.format("%s, %s!", greeting, name));
}
}
在user提供的端口中可以看到,会访问服务端接口来返回greeting。
配置提供了一个@LoadBalanced WebClient.Builder实例,在命中端点/hi时,使用此构建器创建一个WebClient实例,该实例GET向Say Hello服务的 URL 发出 HTTP 请求并将结果作为String.
在UserApplication.java,我们还添加了一个/hello执行相同操作的端点。但是,我们不使用@LoadBalanced注释,而是使用@Autowired负载平衡器交换过滤器函数 ( lbFunction),我们通过使用该filter()方法将其传递给WebClient我们以编程方式构建的实例。
尽管为两个端点设置的负载均衡实例略有不同,但两者的最终行为完全相同。Spring Cloud LoadBalancer 用于选择合适的Say Hello服务实例。
还需要一个@Configuration类来设置负载均衡WebClient.Builder实例。
@Configuration
@LoadBalancerClient(name = "say-hello", configuration = SayHelloConfiguration.class)
public class WebClientConfig {
@loadBalanced
@Bean
WebClient.Builder webClientBuilder() {
return WebClient.builder();
}}
@LoadBalanced 是 Spring Cloud 提供的一个注解,用于开启客户端负载均衡功能。当使用 @LoadBalanced 注解修饰 RestTemplate、WebClient 等客户端组件时,它会自动将请求负载均衡到多个服务实例中。
@LoadBalancerClient 是 Spring Cloud 提供的一个注解,用于配置客户端负载均衡器的行为。它可以指定需要进行负载均衡的服务名称,以及负载均衡的配置类。本例中它会自动将请求负载均衡到名为 “say-hello” 的服务实例中,并根据 SayHelloConfiguration 中的配置进行负载均衡。
在WebClientConfig.java中,使用@LoadBalancerClient注释来传递自定义 LoadBalancer 配置。
@LoadBalancerClient(name = "say-hello", configuration = SayHelloConfiguration.class)
这意味着,每当访问服务时,Spring Cloud LoadBalancer 不会使用默认设置运行,而是使用SayHelloConfiguration.java中提供的配置。
public class SayHelloConfiguration {
@Bean
@Primary
ServiceInstanceListSupplier serviceInstanceListSupplier() {
return new DemoServiceInstanceListSuppler("say-hello");
}
}
class DemoServiceInstanceListSuppler implements ServiceInstanceListSupplier {
private final String serviceId;
DemoServiceInstanceListSuppler(String serviceId) {
this.serviceId = serviceId;
}
@Override
public String getServiceId() {
return serviceId;
}
@Override
public Flux<List<ServiceInstance>> get() {
return Flux.just(Arrays
.asList(new DefaultServiceInstance(serviceId + "1", serviceId, "localhost", 8090, false),
new DefaultServiceInstance(serviceId + "2", serviceId, "localhost", 9092, false),
new DefaultServiceInstance(serviceId + "3", serviceId, "localhost", 9999, false)));
}
}
在这个类里实现了ServiceInstanceListSupplier,并且还提供了3个硬编码实例,serviceId传入的是say-hello。
测试,直接访问接口:
guide64、Spring Cloud Data Flow
Spring Cloud Data Flow 是一个用于构建和管理数据流管道的开源工具。它是 Spring Cloud
生态系统中的一个子项目,旨在简化数据处理和分析的开发和部署流程。
Spring Cloud Data Flow 提供了一组可视化的工具和
API,用于构建、部署和管理数据流应用程序。用户可以通过简单的拖放操作,将各种数据处理组件(例如消息队列、数据库、分析工具等)组合成一个完整的数据流管道,并将其部署到云端或本地集群中。
Spring Cloud Data Flow
还提供了一组强大的监控和管理工具,用于实时监控数据流管道的运行状态,以及进行故障排查和性能优化。
Spring Cloud Data Flow 支持多种数据处理框架,例如 Spring Cloud Stream、Spring Cloud
Task、Apache Spark、Apache Kafka 等等。它还提供了丰富的扩展点,方便用户自定义数据处理组件和管道流程。
总之,Spring Cloud Data Flow 是一个强大的数据流处理工具,可以帮助用户快速构建和管理高效、可靠的数据流管道。
仅了解。
guide65、Spring Boot Kubernetes
Kubernetes(简称 K8s)是一个开源的容器编排和管理平台。
Kubernetes 可以自动化容器的部署、扩展、管理和故障恢复等操作,使得在容器化的环境中运行应用程序更加简单和高效。Kubernetes
支持多种容器运行时,例如 Docker、rkt 等,可以运行在各种云计算平台上,例如 Amazon Web Services、Microsoft Azure、Google Cloud Platform 等等。
Kubernetes 还提供了丰富的 API 和命令行工具,用于管理和操作容器集群。它支持多种部署和扩展方式,包括手动部署、自动扩展、滚动升级等等。同时,Kubernetes 也提供了一组强大的监控和调试工具,方便用户进行故障排查和性能优化。
扩展阅读:https://worktile.com/kb/ask/20048.html