在 Spring Boot 中,“扩展配置”通常指在不修改框架默认行为的前提下,增加、覆盖或定制配置能力。下面从常见场景 + 实现方式系统说明。
# application.yml
spring:
profiles:
active: dev
---
spring:
profiles: dev
server:
port: 8080
---
spring:
profiles: prod
server:
port: 80
Spring Boot 默认加载顺序(后者覆盖前者):
file:./config/file:./classpath:/config/classpath:/也可指定:
java -jar app.jar --spring.config.location=/opt/app/config/
--spring.config.name=myapp
@ConfigurationProperties 扩展自定义配置@ConfigurationProperties(prefix = "app")
@Component
public class AppConfig {
private String name;
private int timeout;
// getter / setter
}
app:
name: demo
timeout: 3000
@EnableConfigurationProperties(AppConfig.class)
@PropertySource 加载额外配置@Configuration
@PropertySource("classpath:extra.properties")
public class ExtraConfig {
}
⚠️ 注意:
application.yml@Autowired
Environment env;
Map<String, Object> map = new HashMap<>();
map.put("app.dynamic", "value");
((ConfigurableEnvironment) env)
.getPropertySources()
.addFirst(new MapPropertySource("dynamic", map));
my-spring-boot-starter
├── spring.factories
└── MyAutoConfiguration
spring.factories:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration
@Configuration
@ConditionalOnClass(RedisTemplate.class)
@ConditionalOnProperty(prefix = "app.redis", name = "enabled")
public class RedisAutoConfig {
}
示例(Nacos):
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
@RefreshScope
@RestController
public class ConfigController {
@Value("${app.name}")
private String name;
}
(需 Spring Cloud)
| 需求 | 推荐方式 |
|---|---|
| 多环境 | profiles |
| 自定义参数 | @ConfigurationProperties |
| 外部配置 | config.location |
| 动态配置 | Environment |
| 框架扩展 | AutoConfiguration |
| 配置中心 | Nacos / Apollo |
如果你有具体场景(如:动态配置、多模块、配置加密、K8s 配置),我可以给更针对性的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。