spring boot自定义配置源操作步骤
需积分: 0 168 浏览量
更新于2020-08-29
收藏 50KB PDF 举报
在Spring Boot应用中,我们通常使用application.properties或application.yml文件来定义配置,但有时需要引入非标准来源的配置,比如远程配置中心。本教程将详细解释如何自定义配置源,以便能够加载这些特殊来源的配置。
我们需要了解Spring Boot默认的配置加载机制。它会从以下位置自动加载配置:
1. application.properties 或 application.yml 在类路径下的config目录。
2. application.properties 或 application.yml 在类路径根目录。
3. 如果应用运行在jar包中,还会查找META-INF/resources/application.properties 或 META-INF/resources/application.yml。
4. 同时支持命令行参数和JVM系统属性。
然而,当需要加载远程或非标准格式的配置时,我们需要自定义配置源。以下是自定义配置源的三个关键步骤:
**第一步:编写PropertySource**
创建一个类继承自EnumerablePropertySource,这个类需要包含配置信息。在这个例子中,我们使用HashMap来存储配置。例如:
```java
public class MyPropertySource extends EnumerablePropertySource<Map<String, String>> {
public MyPropertySource(String name, Map<String, String> source) {
super(name, source);
}
@Override
public String[] getPropertyNames() {
return source.keySet().toArray(new String[source.size()]);
}
@Override
public Object getProperty(String name) {
return source.get(name);
}
}
```
**第二步:编写PropertySourceLocator**
PropertySourceLocator接口用于找到并返回PropertySource实例。在这个例子中,我们在locate方法中创建一个Map对象作为配置源,实际使用时应替换为从远程服务器获取配置的逻辑:
```java
public class MyPropertySourceLocator implements PropertySourceLocator {
@Override
public PropertySource<?> locate(Environment environment) {
Map<String, String> properties = new HashMap<>();
properties.put("myName", "lizo");
MyPropertySource myPropertySource = new MyPropertySource("myPropertySource", properties);
return myPropertySource;
}
}
```
**第三步:让PropertySourceLocator生效**
创建一个配置类,并声明一个Bean,该Bean是PropertySourceLocator的实现:
```java
@Configuration
public class MyConfigBootstrapConfiguration {
@Bean
public MyPropertySourceLocator myPropertySourceLocator() {
return new MyPropertySourceLocator();
}
}
```
接下来,我们需要告诉Spring Boot这个配置类是一个启动配置类,因此它将在应用程序启动时优先加载。这通过在`META-INF/spring.factories`文件中添加以下内容来完成:
```
org.springframework.cloud.bootstrap.BootstrapConfiguration=com.lizo.MyConfigBootstrapConfiguration
```
现在,Spring Boot将在启动时加载我们的自定义配置源。
**测试自定义配置源**
创建一个简单的Spring Boot应用来验证配置是否成功加载:
```java
@SpringBootApplication
public class Test2 {
public static void main(String[] args) throws SQLException {
ConfigurableApplicationContext run = SpringApplication.run(Test2.class, args);
Ser bean = run.getBean(Ser.class);
System.out.println(bean.getMyName());
}
@Component
public static class Ser {
@Value("${myName}")
private String myName;
}
}
```
在上述测试中,`Ser` 类的 `myName` 字段将从我们自定义的配置源中获取值。运行应用程序,控制台将输出“lizo”,证明配置已成功加载。
通过自定义PropertySource和PropertySourceLocator,我们可以轻松地集成任何来源的配置到Spring Boot应用中。这使得在分布式系统中实现动态配置、远程配置成为可能,增强了系统的灵活性和可扩展性。
weixin_38726186
- 粉丝: 5
- 资源: 895
最新资源
- 清华大学电子系下学期Matlab音乐合成大作业源码+文档说明(高分项目)
- QT-mapviewer 6.8.0 暗黑地图实现 支持高德地图,腾讯地图 支持地理/逆地理编码,路径规划,瓦片地图等功能
- PL0编译器C语言实现
- E000541创意设计广告印刷类网站模板+PHP+Mysql+易优CMS
- OpenGL使用OpenGL实现延迟着色Deferred Shading
- 基于深度学习的模糊人脸图像增强系统源码+项目说明(高分毕业设计项目)
- AutoBaostock 开源金融数据自动下载器主要源码
- 机械设计老化测试架sw21可编辑全套技术资料100%好用.zip
- abaqus 非均质模型,随机材料参数赋予 可实现给一个模型的不同单元赋予不同的材料
- E000526美容化妆减肥类网站模板+PHP+Mysql+易优CMS
- ARTFCLanhuProject.zip
- E000540摄影科技传媒网站模板+PHP+Mysql+易优CMS模板
- 双层扭曲光子晶体辐射场拓扑光力; - 复现:2022子刊Science Advances; - 结果关键词:光子晶体,能带,远场偏振椭圆分布 (偏振场),连续域束缚态 (BIC),一幅图绘制品质因子和
- 机械设计康复机器人sw18全套技术资料100%好用.zip
- 开源校园小情书微信小程序,社区小程序前后端
- E000613网站建设网络设计营销类网站模板+PHP+CMS+易优CMS建站模板