关键词:
概述
我们知道,在Spring boot中可以通过xml或者@ImportResource 来引入自己的配置文件,但是这里有个限制,必须是本地,而且格式只能是 properties(或者 yaml)。那么,如果我们有远程配置,如何把他引入进来来呢。如果有兴趣可以看另外一篇博客,介绍了spring cloud是如何引入远程配置 Spring Cloud 配置服务。当然不看也不影响后面阅读。
如何做
其实自定义配置源只需要3步
第一步,编写PropertySource
编写一个类继承EnumerablePropertySource,然后实现它的抽象方法即可,抽象方法看名字就知道作用,简单起见,这里使用一个map来保存配置,例如:
public class MyPropertySource extends EnumerablePropertySource<Map<String,String>> { public MyPropertySource(String name, Map 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,需要重写的方法只有一个,就是返回一个PropertySource对象,例如,
public class MyPropertySourceLocator implements PropertySourceLocator { @Override public PropertySource<?> locate(Environment environment) { //简单起见,这里直接创建一个map,你可以在这里写从哪里获取配置信息。 Map<String,String> properties = new HashMap<>(); properties.put("myName","lizo"); MyPropertySource myPropertySource = new MyPropertySource("myPropertySource",properties); return myPropertySource; } }
第三步,让PropertySourceLocator生效
新建一个配置类,例如
@Configuration public class MyConfigBootstrapConfiguration { @Bean public MyPropertySourceLocator myPropertySourceLocator(){ return new MyPropertySourceLocator(); } }
最后再创建/更新 META-INFO/spring.factories(如果做过自定义Spring boot开发的都知道这个文件)
org.springframework.cloud.bootstrap.BootstrapConfiguration=com.lizo.MyConfigBootstrapConfiguration
简单来说就是给Spring Boot说,这个是一个启动配置类(一种优先级很高的配置类)。
编写测试
测试一
@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; public String getMyName() { return myName; } public void setMyName(String myName) { this.myName = myName; } } }
正确输出
测试二
我们在application配置文件中,引入这个变量呢,例如在application.properties中
my.name=${myName}
同样,结果也是能够生效的
myName就是上面在PropertySourceLocator中写进去的配置属性。运行程序,可以看见确实是可以正确输出。
小结
上面只是抛砖引玉,这样无论是哪里的数据源,都可以通过这种方式编写,把配置交给Spring 管理。这样再也不怕在本地配置文件中出现敏感信息啦,再也不怕修改配置文件需要登录每一个机器修改啦。
springboot自定义配置文件数据源
参考技术ASpringBoot支持动态的读取文件,留下的扩展接口org.springframework.boot.env.EnvironmentPostProcessor。这个接口是spring包下的,使用这个进行配置文件的集中管理,而不需要每个项目都去配置配置文件。这种方法也是springboot框架留... 查看详情
如何禁用 TomcatServletWebServerFactory 的 SpringBoot 自动配置以便自定义 spring-starter 提供它?
】如何禁用TomcatServletWebServerFactory的SpringBoot自动配置以便自定义spring-starter提供它?【英文标题】:HowtodisableSpringBootautoconfigurationforTomcatServletWebServerFactoryinorderforacustomspring-startertoprovideit?【发布时间】:2020-03-0807:46:49【问 查看详情
springboot自动装配定义与自定义starter原理,及如何实现自定义装配
前言SpringBoot自动装配定义与自定义starter,基于约定大于配置的原则,实现Spring组件自动装配的目的。 装配的依赖(方式) 模式注解、@Enable模块、条件装配、工厂加载机制。激活自动化装配、实现自动化装配、配置自动... 查看详情
springboot自动装配定义与自定义starter原理,及如何实现自定义装配
前言SpringBoot自动装配定义与自定义starter,基于约定大于配置的原则,实现Spring组件自动装配的目的。 装配的依赖(方式) 模式注解、@Enable模块、条件装配、工厂加载机制。激活自动化装配、实现自动化装配、配置自动... 查看详情
springboot使用嵌入式容器,自定义filter如何配置?
Listener、Filter和Servlet是JavaWeb开发过程中常用的三个组件,其中Filter组件的使用频率最高,经常被用来做简单的权限处理、请求头过滤和防止XSS***等。如果我们使用的是传统的SpringMVC进行开发,那么只需要在Tomcat的web.xml文件中进... 查看详情
如何在 android gradle.kts 中定义自定义源集?
】如何在androidgradle.kts中定义自定义源集?【英文标题】:Howtodefinecustomsourcesetinandroidgradle.kts?【发布时间】:2021-11-1809:57:26【问题描述】:我想在三个商店发布我的应用程序。我的应用程序中有汇率部分和更新对话框(其中有一... 查看详情
springboot实现自定义国际化
...建目录login.properties,login_zh_CN.properties,login_en_US.properties2.SpringBoot自动配置好了管理国际化资源文件的组件;配置前缀spring.messages.basename=i18n.login@Co 查看详情
自定义springbootstarter通过注解启动装配
...论MyConfiguration类是否被spring扫描到都会进行加载1、创建springboot项目2、引入starterjar包3、在启动类添加@EnableSms注解,启用Starter4、配置参数5、调用 查看详情
springboot如何自定义自己的条件注解与自动配置?(代码片段)
SpringBoot的核心功能就是为整合第三方框架提供自动配置,而本文则带着大家实现了自己的自动配置和Starter,一旦真正掌握了本文的内容,就会对SpringBoot产生“一览众山小”的感觉。自定义条件注解在SpringBoot中,... 查看详情
springboot自定义druid数据源,如何注入配置(代码片段)
依赖版本依赖版本如下:<properties><java.version>1.8</java.version><spring-boot.version>2.6.11</spring-boot.version><druid-spring-boot-starter.version>1.2.5</druid-sp 查看详情
在springboot下读取自定义properties配置文件的方法
SpringBoot工程默认读取application.properties配置文件。如果需要自定义properties文件,如何读取呢?一、在resource中新建.properties文件在resource目录下新建一个config文件夹,然后新建一个.properties文件放在该文件夹下。如图remote.properties... 查看详情
springboot自动配置原理源码分析+自定义starter启动器+可视化监控+mybatisplus使用(代码片段)
一、springBoot自动化配置原理1.starter管理机制通过依赖了解SpringBoot管理了哪些starter通过依赖spring-boot-dependencies搜索starter-发现非常多的官方starter,并且已经帮助我们管理好了版本。项目中使用直接引入对应的starter即可,... 查看详情
spring源码-自定义标签-4
一、自定义标签,自定义标签在使用上面相对来说非常常见了,这个也算是spring对于容器的拓展。通过自定义标签的方式可以创造出很多新的配置方式,并且交给容器直接管理,不需要人工太多的关注。这也是spring对于配置... 查看详情
springboot自定义配置
在springboot中自定义配置项,一下只是其中的一种实现方式application.propertiesalipay.url=https://openapi.alipaydev.com/gateway.doalipay.format=JSONalipay.charset=UTF-8alipay.sign_type=RSA2第一种方式:自定义一个配置属性的实体类1@ConfigurationPr 查看详情
作为管理员,我如何在自定义闪电记录表单中配置字段?
】作为管理员,我如何在自定义闪电记录表单中配置字段?【英文标题】:HowcanIconfigurefieldsinacustomlightningrecordformasanadmin?【发布时间】:2021-10-2310:42:47【问题描述】:我是Salesforce的新手,目前正在尝试为具有特定功能的项目创... 查看详情
springboot的自定义配置
参考技术ASpringBoot免除了项目中大部分的手动配置,对一些特定情况,我们可以通过修改全局配置文件以适应具体生产环境,可以说,几乎所有的配置都可以写在application.properties文件中,SpringBoot会自动加载全局配置文件,从而... 查看详情
springboot自定义配置
有时候需要自己定义一些配置,比如SpringBoot没有提供Druid连接池的配置,需要我们自己写配置。 配置文件#指定数据源类型为Druidspring.datasource.type=com.alibaba.druid.pool.DruidDataSource##########druid连接池配置#########spring.datasource.dr... 查看详情
如何自定义一个springbootsrarter
...我们通过学习知道了自动配置原理,其实创建一个自定义SpringBootStarter也很简单。目录如何自定义一个SpringBootSrarter?首先创建一个项目,命名为demo-spring-boot-starter,引入SpringBoot相关依赖编写配置文件... 查看详情