当前位置: 首页 > article >正文

Springboot引入Spring Cloud for AWS的配置中心(Parameter Store和Secrets)

问题

现在手上有一个老Spring2.5.15项目,需要使用AWS Parameter Store作为配置中心服务。

思路

引入这个Spring版本对应的Spring Cloud,然后再引入Spring Cloud AWS相关组件。然后,在AWS云上面准备好配置,然后,启动我本地Spring工程,验证有没有使用云端配置。

Spring Cloud引入

Spring Cloud版本选择
从Spring官网可知,我这个老版本的Spring2.5.15,只能选择Spring Cloud 2020.0.x的Cloud版本。具体依赖如下:

<properties><spring-cloud.version>2020.0.6</spring-cloud.version>
</properties>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

等待一段时间后,然后在引入Spring Cloud AWS集成依赖。

Spring Cloud AWS 依赖引入

<properties><spring-cloud-aws.version>2.3.5</spring-cloud-aws.version>
</properties>
<dependencyManagement><dependencies><dependency><groupId>io.awspring.cloud</groupId><artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId><version>${spring-cloud-aws.version}</version></dependency><dependency><groupId>io.awspring.cloud</groupId><artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId><version>${spring-cloud-aws.version}</version></dependency></dependencies>
</dependencyManagement>

注意这里也有版本对应要求的,可以查看Spring Cloud AWS在github上面的开源项目介绍,具体如下图:
Spring Cloud AWS版本选择

<dependency><groupId>io.awspring.cloud</groupId><artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId>
</dependency><dependency><groupId>io.awspring.cloud</groupId><artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId>
</dependency>

Parameter Store创建参数

创建jdbc连接url参数
这里以jdbc连接参数为例子。创建了一个连接参数。

Secrets Manager创建参数

下面设置数据库中用户名和密码,如下图:
secrets设置
配置密钥,如下图:
设置secrets名字

Spring配置

spring:application:name: apiconfig:import:- aws-parameterstore:/config/${spring.application.name}_${spring.profiles.active}- aws-secretsmanager:/secret/${spring.application.name}_${spring.profiles.active}
aws:paramstore:region: cn-north-1defaultContext: ${spring.application.name}secretsmanager:region: cn-north-1defaultContext: ${spring.application.name}

注意,这里用到了spring.config.import,这种方式Spring配置是对原来的boot环境多配置文件的替代。

配置调试日志

# 日志配置
logging:level:io:awspring:cloud:paramstore:AwsParamStorePropertySource: debug

测试验证

重启Spring工程,出现如下内容,说明spring读到了配置:

11:02:13.555 [restartedMain] INFO  i.a.c.s.AwsSecretsManagerPropertySources - [logTo,255] - Loading secrets from AWS Secret Manager secret with name: /secret/api_local, optional: false
11:02:13.555 [restartedMain] INFO  i.a.c.p.AwsParamStorePropertySources - [logTo,255] - Loading property from AWS Parameter Store with name: /config/api_local, optional: false
11:02:13.555 [restartedMain] DEBUG i.a.c.p.AwsParamStorePropertySource - [logTo,252] - Populating property retrieved from AWS Parameter Store: .spring.datasource.druid.master.url

类似如下效果:
启动效果

注意点

由于这里spring工程没有启用boot方式。所以在Spring源代码里面使用@Value("${xxx.xxx}")方式配置无法读到Parameter Store的配置,如果想要读到Parameter Store里面的数据需要使用@ConfigurationProperties("xxx")这种JavaBean方式配置。@Value("${xxx.xxx}")方式配置在 Secrets Manager仍旧生效。@ConfigurationProperties("xxx")配置如下:

@ConfigurationProperties("bc")
public class MyProperties {private boolean name;
...
}

按Spring文档的意思,就是@Value方式,我们得少用,我们多用@ConfigurationProperties(“xxx”)方式。
这里简单的说就是Parameter Store不支持@Value注解。

总结

spring.config.import方式配置,是Spring为了支持云原生配置中心,后面加入新的配置方式,是对boot配置方式的替代。之前写过一篇文章(《Spring Cloud AWS配置中心使用》)就是使用Spring老的boot方式进行的配置。

参考

  • Spring Cloud
  • Spring Cloud2020最新版本
  • spring-cloud-aws
  • Externalized Configuration
  • Leveraging AWS Systems Manager Parameter Store for Spring Boot Configuration
  • Spring Cloud AWS配置中心使用

相关文章:

Springboot引入Spring Cloud for AWS的配置中心(Parameter Store和Secrets)

问题 现在手上有一个老Spring2.5.15项目&#xff0c;需要使用AWS Parameter Store作为配置中心服务。 思路 引入这个Spring版本对应的Spring Cloud&#xff0c;然后再引入Spring Cloud AWS相关组件。然后&#xff0c;在AWS云上面准备好配置&#xff0c;然后&#xff0c;启动…...

打破云平台壁垒支持多层级JSON生成的MQTT网关技术解析

工业智能网关的上行通信以MQTT协议为核心&#xff0c;但在实际应用中&#xff0c;企业往往需要将数据同时或分场景接入多个公有云平台&#xff08;如华为云IoT、阿里云IoT、亚马逊AWS IoT&#xff09;&#xff0c;甚至私有化部署的第三方平台。为实现这一目标&#xff0c;网关需…...

Modbus通信中的延迟和时间间隔详解

在工业自动化领域,Modbus协议作为最广泛使用的通信协议之一,其通信时序和延迟控制直接影响到系统的稳定性和效率。本文将深入探讨Modbus通信中涉及的各种延迟和时间间隔,帮助开发者更好地理解和应用这些概念。 一、串口Modbus通信中的延迟问题 1.1 为什么需要延迟? 在基…...

maven 最短路径依赖优先

问题描述&#xff1a; 项目在升级大版本后出现了&#xff0c;两个不同模块所引用的同一个依赖包版本不同 module A 引用了 module B&#xff0c;module B 引用了 A_1.0.jar->B_1.0.jar->C_1.0.jar(C 为B 里面的包) 在执行 mvn dependency:tree 后发现&#xff1a; modul…...

SAAS架构设计2-流程图-用户与租户之间对应关系图

在SAAS&#xff08;Software as a Service&#xff0c;软件即服务&#xff09;结构中&#xff0c;用户与租户之间的关系可以通过一对一和多对多两种方式来定义。这两种关系模式各自有着不同的应用场景和特点。 用户和租户的关系&#xff08;一对一&#xff09; 一对一关系 在这…...

TypeScript入门到精通

学习ts之前&#xff0c;我们首先了解一下我们为什么要学ts,ts是什么&#xff1f;ts比js有不同呢&#xff1f; TypeScript 是 JavaScript 的一个超集&#xff0c;是由微软开发的自由和开源的编程语言&#xff0c;支持 ECMAScript 6 标准&#xff08;ES6 教程&#xff09;。在 Ja…...

三、Docker目录挂载、卷映射、网络

目录挂载 如果主机目录为空&#xff0c;则容器内也为空 -v表示目录挂载 冒号前面的是主机上的目录&#xff0c;冒号后面的是docker容器里面的地址 修改主机上的文件&#xff0c;发现docker容器里面的内容也随之改变。 同样修改docker容器里面的内容&#xff0c;主机上的文件…...

迪米特法则 (Law of Demeter, LoD)

定义&#xff1a;迪米特法则(Law of Demeter, LoD)&#xff1a;一个软件实体应当尽可能少地与其他实体发生相互作用。 迪米特法则&#xff08;Law of Demeter&#xff0c;LoD&#xff09;又叫作最少知识原则&#xff08;Least Knowledge Principle&#xff0c;LKP)&#xff0c;…...

【R语言编程绘图-函数篇】

基础函数绘制 R语言可通过curve()函数直接绘制数学函数图形&#xff0c;无需预先生成数据点。例如绘制正弦函数&#xff1a; curve(sin, from -pi, to pi, col "blue", lwd 2)自定义函数绘制 对于用户自定义函数&#xff0c;需先定义函数表达式&#xff1a; …...

训练自己的yolo模型,并部署到rk3588上

文章目录 1. 训练自己的模型2. pt转onnx3. onnx转rknn4. 后续…… 1. 训练自己的模型 如何训练自己的yolo模型&#xff0c;网络上已经有足够多的教程&#xff0c;这里只简单的描述一下。如果已经有了自己的.pt模型&#xff0c;那么可以直接跳转到第二节。 此处是以检测模型的…...

Leetcode 3556. Sum of Largest Prime Substrings

Leetcode 3556. Sum of Largest Prime Substrings 1. 解题思路2. 代码实现3. 算法优化 题目链接&#xff1a;3556. Sum of Largest Prime Substrings 1. 解题思路 这一题毕竟只是这一次双周赛的第一题&#xff0c;虽然标记为medium的题目&#xff0c;但是思路上还是非常简单…...

以少学习:通过无标签数据从大型语言模型进行知识蒸馏

Learning with Less: Knowledge Distillation from Large Language Models via Unlabeled Data 发表&#xff1a;NNACL-Findings 2025 机构&#xff1a;密歇根州立大学 Abstract 在实际的自然语言处理&#xff08;NLP&#xff09;应用中&#xff0c;大型语言模型&#xff08…...

鸿蒙OSUniApp 实现带有滑动删除的列表#三方框架 #Uniapp

使用 UniApp 实现带有滑动删除的列表 在移动应用开发中&#xff0c;滑动删除&#xff08;Swipe to Delete&#xff09;是一种常见且实用的交互方式&#xff0c;广泛应用于消息、待办、收藏等列表场景。用户只需在列表项上左右滑动&#xff0c;即可快速删除或管理数据。随着 Ha…...

Qt qml Network error问题

最近在学习Qt&#xff0c;需要调用地图&#xff0c;所以用到了QML&#xff0c;但是却遇到了这样的问题 d://qt_project//run//main.qml: Network error 现在我展示一下我的main文件的代码&#xff1a; #include <QApplication> #include <QQuickView> #include &l…...

Prompt工程:解锁大语言模型的终极密钥

Prompt工程&#xff1a;解锁大语言模型的终极密钥 一、引言&#xff1a;Prompt的战略价值重构 在人工智能技术加速渗透的2025年&#xff0c;Prompt&#xff08;提示词&#xff09;作为连接人类意图与大语言模型&#xff08;LLM&#xff09;的核心接口&#xff0c;其战略地位已…...

Spring Boot微服务架构(六):伪装的微服务有哪些问题?

伪装的微服务有哪些问题&#xff1f; 伪装的微服务架构&#xff08;即表面上模仿微服务设计&#xff0c;但未真正遵循其核心原则的系统&#xff09;通常具备以下特征点&#xff0c;这些特征可能导致系统复杂度增加、维护困难或性能下降&#xff1a; ​​1. 服务间强耦合​​ …...

恶意npm与VS Code包窃取数据及加密货币资产

60个npm包窃取系统敏感信息 安全研究人员在npm软件包注册表中发现60个恶意组件&#xff0c;这些组件能够收集主机名、IP地址、DNS服务器和用户目录信息&#xff0c;并将其发送至Discord平台控制的终端节点。据Socket安全研究员Kirill Boychenko上周发布的报告显示&#xff0c;…...

Matlab快速上手五十六:详解符号运算里假设的用法,通过假设可以设置符号变量的取值范围,也可以通过假设设置变量属于集合:整数、正数和实数等

1.符号变量中假设的概念 在符号数学工具箱中&#xff0c;符号变量默认范围是全体复数&#xff0c;也就是说&#xff0c;符号运算是在全体复数域进行的&#xff0c;若需要运算中&#xff0c;不使用全体复数域&#xff0c;可以为变量设定取值范围&#xff0c;这就用到了假设&…...

机器学习笔记【Week1】

一、机器学习简介&#xff08;Introduction&#xff09; 什么是机器学习&#xff1f; 定义&#xff08;Tom Mitchell&#xff09;&#xff1a; “A computer program is said to learn from experience E with respect to some task T and performance measure P, if its per…...

什么是3D全景视角?3D全景有什么魅力?

什么是3D全景视角&#xff1f;3D全景视角的全面解析。 3D全景视角&#xff0c;又称为3D全景技术或3D实景技术&#xff0c;是新兴的富媒体技术&#xff0c;基于静态图像和虚拟现实&#xff08;VR&#xff09;技术&#xff0c;通过全方位、无死角地捕捉和展示环境&#xff0c;为…...

【Mini-F5265-OB开发板试用测评】按键控制测试

本文介绍了如何使用按键控制 MCU 引脚的输出电平。 原理 由原理图可知 板载用户按键 K1 和 K2 分别与主控的 PB0 和 PB1 相连。 代码 #define _MAIN_C_#include "platform.h" #include "gpio_key_input.h" #include "main.h"int main(void) …...

Debian重装系统后

安装配置java环境 手动安装 下载openJDK&#xff1a;openJDK 设置替代项 sudo update-alternatives --install /usr/bin/java java /opt/jdk-21.0.2/bin/java 1 sudo update-alternatives --install /usr/bin/javac javac /opt/jdk-21.0.2/bin/javac 1 sudo update-alternat…...

每日Prompt:古花卷

提示词 主体对象 一本展开的古画卷 古画卷内呈现的内容 一片微型春秋鲁国&#xff0c;有古代马车&#xff0c;孔子乘坐周游列国&#xff0c;颜回、子路、子贡、曾参紧随其后 古画卷的外观状态 表面已经开裂和风化&#xff0c;呈现出年代感和历史感 与文字描述的首句一致&…...

[学习]C语言指针函数与函数指针详解(代码示例)

C语言指针函数与函数指针详解 文章目录 C语言指针函数与函数指针详解一、引言二、指针函数&#xff08;函数返回指针&#xff09;定义与语法典型应用场景注意事项 三、函数指针&#xff08;指向函数的指针&#xff09;定义与声明初始化与调用赋值方式调用语法 高级应用回调函数…...

夏季用电高峰如何防患于未“燃”?电力测温技术守护城市生命线

随着夏季来临用电负荷激增&#xff0c;电力系统面临严峻的高温考验&#xff0c;电力测温技术的重要性愈发凸显&#xff0c;电力安全是城市生命线工程的核心环节&#xff0c;电力测温已从"可选功能"升级为"必要的基础安全设施"。通过实时感知、智能分析和快…...

浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)

目录 6-3 输入格式: 输出格式: 输入样例: 输出样例: 6-4 输入格式: 输出格式: 输入样例: 输出样例: 6-5 输入格式: 输出格式: 输入样例: 输出样例: 6-6 输入格式: 输出格式: 输入样例: 输出样例: 6-3 第6章-3 列表或元组的数字元素求和 分数 20 全屏浏览 切换布局 作者 陈春晖 …...

Leetcode 3563. Lexicographically Smallest String After Adjacent Removals

Leetcode 3563. Lexicographically Smallest String After Adjacent Removals 1. 解题思路2. 代码实现 题目链接&#xff1a;3563. Lexicographically Smallest String After Adjacent Removals 1. 解题思路 这次的最后一题同样没有自力搞定&#xff0c;简直了…… 这道题还…...

【创造型模式】抽象工厂方法模式

文章目录 抽象工厂方法模式产品族与产品等级结构抽象工厂方法模式的角色和职责抽象工厂方法模式的实现抽象工厂方法模式的优缺点适用场景 抽象工厂方法模式 工厂方法模式引入了“工厂等级结构”&#xff0c;解决了简单工厂方法过分依赖单一工厂的问题。但是工厂方法模式存在的一…...

一台手机怎样实现多IP上网?方法有多种

在数字时代&#xff0c;多IP上网已成为许多手机用户的刚需。本文将详细介绍如何通过不同技术手段实现手机多IP上网&#xff0c;帮助读者根据实际需求选择适合的解决方案。 一、为什么一台手机要实现多IP上网 手机实现多IP上网的典型场景包括&#xff1a; ①防止同一IP操作多个…...

【FFmpeg+SDL】播放音频时,声音正常但是有杂音问题(已解决)

下面这个函数是SDL音频的回调函数(修改后的) void fill_audio(void *udata,Uint8 *stream,int len) {static int cc 0;cc;qDebug()<<QString::fromLocal8Bit("想要填充:%1字节").arg(len)<<cc;AudioOutput* is static_cast<AudioOutput*>(udat…...