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

《在 Spring Boot 中安全使用 Qwen API-KEY:环境变量替代明文配置的最佳实践》

《在 Spring Boot 中安全使用 Qwen API-KEY:环境变量替代明文配置的最佳实践》

想要的效果其实就是 把 Qwen API-KEY 放到系统环境变量中,然后在 application.yml 里通过占位符读取,而不写明文。
这样即便 application.yml 被提交到 Git,也不会泄露 key。

分成三个步骤搞定:


1. 在系统中设置 Qwen API-KEY

假设真实的API-KEY是sk-12asdadba01231231b6a5asda9d7d

Mac / Linux

# 临时生效(只对当前终端会话有效)
export QWEN_API_KEY=sk-12asdadba01231231b6a5asda9d7d# 永久生效(写入 shell 配置文件,比如 ~/.bashrc 或 ~/.zshrc)
echo 'export QWEN_API_KEY=sk-12asdadba01231231b6a5asda9d7d' >> ~/.zshrc
source ~/.zshrc

Windows(PowerShell)

# 临时生效(仅当前会话)
$env:QWEN_API_KEY="sk-12asdadba01231231b6a5asda9d7d"# 永久生效
setx QWEN_API_KEY "sk-12asdadba01231231b6a5asda9d7d"

2. 在 application.yml 中引用环境变量

qwen:api-key: ${QWEN_API_KEY}
  • ${QWEN_API_KEY} 会从系统环境变量中读取值
  • 如果想给默认值(避免本地没设置时报错):
qwen:api-key: ${QWEN_API_KEY:default-key-if-not-set}

3. 在 Spring Boot 中读取

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class QwenConfig {@Value("${qwen.api-key}")private String apiKey;public String getApiKey() {return apiKey;}
}

这样 Spring Boot 启动时会自动读取系统的环境变量 QWEN_API_KEY
application.yml 就不需要暴露明文了。


💡 补充建议
如果你部署在服务器(比如 Docker / K8s),可以在启动容器时直接传环境变量:

docker run -e QWEN_API_KEY=sk-12asdadba01231231b6a5asda9d7d my-springboot-app

读取 环境变量 → application.yml → 默认值 的。

4. 注意

如果启动IDEA,发现读取不到设置的环境变量的话,可以先用羡慕这行命令读取环境变量,看看是否生效了。

echo $QWEN_API_KEY

如果这个时候仍然没有获取到内容,但是去~/.zshrc下可以查看到对应的值的话,原因就是当时已经打开过IDEA了,这个时候读取不到设置的环境变量,需要重新退出IDEA,然后重新打开去输入上述命令查看。

http://www.lryc.cn/news/614282.html

相关文章:

  • 一文可视化分析2025年6月计算机视觉顶刊IJCV前沿热点
  • 数据结构(16)排序(上)
  • 代理模式在C++中的实现及面向对象设计原则的满足
  • vscode无法跳转到定义引用
  • 以下是使用这款ePub编辑器将指定章节转换为TXT文本文档的操作方法
  • JAVA基础-NIO
  • flutter TLS protocol versions: (TLSv1.2, TLSv1.3)
  • 【数据结构】排序(sort) -- 计数排序
  • 在 Elasticsearch/Kibana (ELK Stack) 中搜索包含竖线 (|)​​ 这类特殊字符的日志消息 (msg 字段) ​确实需要转义
  • 软件包管理、缓存、自定义 YUM 源
  • Vulnhub drippingblues 靶场复现 详细攻略
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在高空抛物检测的实战优化
  • 自适应反步控制:理论与设计
  • 分布式微服务--GateWay的断言以及如何自定义一个断言
  • MySQL 配置性能优化赛:核心策略与实战技巧
  • 分布式系统性能优化实战:从瓶颈定位到架构升级
  • 前端后端之争?JavaScript和Java的特性与应用场景解析
  • Microsoft Dynamics AX 性能优化解决方案
  • 用JOIN替代子查询的查询性能优化
  • 深入解析基于Zookeeper分布式锁在高并发场景下的性能优化实践指南
  • DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛
  • AI漫画翻译器-上传图片自动翻译,支持多语言
  • 分享超图提供的、很不错的WebGIS学习资源
  • 从安卓兼容性困境到腾讯Bugly的救赎:全链路崩溃监控解决方案-卓伊凡|bigniu
  • 什么是局放?局放在线智能传感器,敏锐洞察电气设备中的隐形故障!
  • bytearray和bytes
  • 进程管理、系统高负载、cpu超过800%等实战问题处理
  • 【Mybatis入门】配置Mybatis(IDEA)
  • scratch笔记和练习-第11课:穿越峡谷
  • [Linux]学习笔记系列 -- [arm[kernel]