本文目录导读:

我来为你提供一个完整的Spring Boot多环境配置案例。
项目结构
src/main/
├── java/com/example/demo/
│ ├── DemoApplication.java
│ ├── controller/
│ │ └── ConfigController.java
│ └── config/
│ └── DataSourceConfig.java
└── resources/
├── application.yml # 主配置
├── application-dev.yml # 开发环境
├── application-test.yml # 测试环境
├── application-prod.yml # 生产环境
└── application-local.yml # 本地环境
主配置文件 application.yml
# 应用基本信息
spring:
application:
name: multi-env-demo
profiles:
# 默认激活开发环境
active: dev
# 公共配置
server:
port: 8080
# 自定义配置示例
app:
version: 1.0.0
# 默认配置,会被环境配置覆盖
environment: default
环境配置文件
application-dev.yml(开发环境)
spring:
datasource:
url: jdbc:mysql://localhost:3306/dev_db?useSSL=false&serverTimezone=UTC
username: dev_user
password: dev_password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
hibernate:
ddl-auto: update
server:
port: 8081
# 日志配置
logging:
level:
com.example: DEBUG
org.springframework: INFO
# 自定义配置
app:
environment: development
debug: true
feature-flags:
enable-cache: false
enable-mock: true
application-test.yml(测试环境)
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
show-sql: true
hibernate:
ddl-auto: create-drop
h2:
console:
enabled: true
server:
port: 8082
logging:
level:
com.example: DEBUG
org.springframework: INFO
app:
environment: testing
debug: true
feature-flags:
enable-cache: false
enable-mock: true
application-prod.yml(生产环境)
spring:
datasource:
url: jdbc:mysql://prod-db.example.com:3306/prod_db?useSSL=true&serverTimezone=UTC
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: false
hibernate:
ddl-auto: validate
server:
port: 80
# 生产环境加密配置
management:
endpoints:
web:
exposure:
include: health,info,metrics
logging:
level:
com.example: WARN
org.springframework: ERROR
app:
environment: production
debug: false
feature-flags:
enable-cache: true
enable-mock: false
application-local.yml(本地环境)
spring:
datasource:
url: jdbc:h2:file:./data/local_db;DB_CLOSE_DELAY=-1
username: sa
password:
driver-class-name: org.h2.Driver
server:
port: 8080
logging:
level:
com.example: TRACE
app:
environment: local
debug: true
feature-flags:
enable-cache: false
enable-mock: true
代码示例
配置文件绑定类
@Configuration
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String version;
private String environment;
private boolean debug;
private FeatureFlags featureFlags = new FeatureFlags();
// getters and setters
// 可以覆盖toString()方法便于调试
public static class FeatureFlags {
private boolean enableCache;
private boolean enableMock;
// getters and setters
}
}
配置正确的使用方式
@RestController
@RequestMapping("/api/config")
public class ConfigController {
@Autowired
private AppConfig appConfig;
@Autowired
private Environment environment;
@GetMapping("/info")
public Map<String, Object> getConfig() {
Map<String, Object> config = new HashMap<>();
config.put("version", appConfig.getVersion());
config.put("environment", appConfig.getEnvironment());
config.put("debug", appConfig.isDebug());
config.put("activeProfiles", Arrays.asList(environment.getActiveProfiles()));
config.put("featureFlags", appConfig.getFeatureFlags());
// 读取特定的配置项
String databaseUrl = environment.getProperty("spring.datasource.url");
config.put("databaseUrl", databaseUrl);
return config;
}
@GetMapping("/profiles")
public String getActiveProfiles() {
// 输出当前激活的环境
return String.join(",", environment.getActiveProfiles());
}
}
启动方式
通过IDE配置
在IDE的运行配置中添加VM参数:
-Dspring.profiles.active=dev
命令行启动
# 使用Maven mvn spring-boot:run -Dspring-boot.run.profiles=dev # 使用Java命令 java -jar demo.jar --spring.profiles.active=dev # 多环境激活(可以有多个profile) java -jar demo.jar --spring.profiles.active=dev,test
环境变量
# Linux/Unix export SPRING_PROFILES_ACTIVE=prod # Windows set SPRING_PROFILES_ACTIVE=prod
修改application.yml
spring:
profiles:
active: dev
profiles:
include: dev,test # 包含多个profile
高级特性
条件配置
@Configuration
@Profile("dev")
public class DevConfig {
@Bean
public MyService myService() {
return new DevMyService();
}
}
// 或者使用注解
@Service
@Profile("test")
public class TestService {
// 只在测试环境注册
}
配置文件分组
# application.yml
spring:
profiles:
group:
dev: dev-datasource, dev-cache
prod: prod-datasource, prod-cache
多环境Jar打包
<!-- pom.xml -->
<profiles>
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
使用示例
启动不同环境
# 开发环境 java -jar multi-env-demo.jar --spring.profiles.active=dev # 生产环境(从环境变量读取敏感信息) DB_USERNAME=admin DB_PASSWORD=secret java -jar multi-env-demo.jar --spring.profiles.active=prod # 本地测试 java -jar multi-env-demo.jar --spring.profiles.active=local
注意事项
- 不要将敏感信息提交到版本控制,使用环境变量或配置中心
- 生产环境关闭开发工具和安全日志
- 使用Spring Config Server来实现动态配置更新
- 合理使用default profile作为配置的兜底
- 考虑配置的优先级:命令行 > 环境变量 > 配置文件
这个案例基本覆盖了Spring Boot多环境配置的核心需求,根据项目的复杂程度,可以灵活调整配置方式和组织方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播