在SpringAI项目中实现多环境配置切换(开发、测试、生产),可通过以下结构化方案实现:


1. 多环境配置文件

创建对应环境的配置文件:

resources/
├── application.yml          # 公共配置
├── application-dev.yml      # 开发环境
├── application-test.yml     # 测试环境
└── application-prod.yml     # 生产环境

示例配置
application.yml (公共基础):

spring:
  ai:
    openai:
      base-url: ${AI_BASE_URL}
      chat:
        model: ${AI_MODEL}
        temperature: 0.7

application-dev.yml (开发环境):

AI_BASE_URL: https://api.dev.example.com
AI_MODEL: gpt-3.5-turbo
API_KEY: dev_sk-xxxxxxxxxxxx

application-prod.yml (生产环境):

AI_BASE_URL: https://api.prod.example.com
AI_MODEL: gpt-4-turbo
API_KEY: ${ENV_PROD_API_KEY}  # 从系统环境变量读取


2. 环境切换机制

(1) 启动时指定环境
# 开发环境
java -jar app.jar --spring.profiles.active=dev

# 生产环境
java -jar app.jar --spring.profiles.active=prod

(2) IDE配置(开发阶段)

IDEA配置示例


在运行配置中设置Active profiles


3. 动态Bean装配

通过@Profile注解实现环境差异化配置:

@Configuration
public class AiConfig {

    @Bean
    @Profile("dev") // 仅开发环境生效
    public ChatClient devChatClient() {
        return new OpenAiChatClient("dev_sk-xxxxx", "gpt-3.5-turbo");
    }

    @Bean
    @Profile("prod") // 仅生产环境生效
    public ChatClient prodChatClient() {
        return new OpenAiChatClient(System.getenv("PROD_API_KEY"), "gpt-4-turbo");
    }
}


4. 敏感信息安全管理

生产环境密钥必须加密:

# application-prod.yml
api-key: ${ENCRYPTED_API_KEY}  # 使用Jasypt等工具加密

启动时注入密钥:

java -jar app.jar --jasypt.encryptor.password=${MASTER_KEY}


5. 环境验证端点(可选)

添加检查接口确认当前环境:

@RestController
public class EnvCheckController {
    
    @Value("${spring.profiles.active}")
    private String env;

    @GetMapping("/env")
    public String checkEnv() {
        return "当前环境: " + env + ", 模型: " + System.getenv("AI_MODEL");
    }
}


最佳实践总结

环节 关键措施
开发 硬编码测试密钥,禁用敏感操作权限
测试 使用沙箱API端点,模拟生产数据量
生产 密钥托管至Vault/K8s Secrets系统
监控 集成Spring Actuator+Prometheus

重要提示:生产环境必须通过CI/CD管道自动注入密钥,禁止配置文件明文存储密钥。不同环境建议使用独立的大模型账户,避免测试流量影响生产服务稳定性。

更多推荐