Spring Boot配置读取实现方法解析
spring boot里面所有的配置信息都放在application.properties中,如果我们想读取配置中的值要怎么做呢?
还需要自己写个读取属性文件的工具类吗?完全不要,我们可以通过各种方式来读取里面的值。
当然写工具类也是一种方式,只是太麻烦了,既然spring boot中有封装好的实现,为什么不用。
environment方式读取
框架中有一个org.springframework.core.env.environment类,可以读取application.properties中配置的值。
用法如下,我们可以看到直接将environment注入进来,然后就可以使用getproperty方法来获取配置的值了,参数是配置的名称。
@restcontroller public class configcontroller { @autowired private environment env; /** * 通过配置的key获取value<br> * {key:.+}是为了解决通过url参数访问的时候小数点丢失的问题 * @param key * @return */ @requestmapping("/config/{key:.+}") object getconfig(@pathvariable string key) { return env.getproperty(key); } }
我们获取下之前配置的tomcat端口,http://localhost/spring-boot/config/server.port可以看到输出的结果正是你配置的值。
@value注解方式读取
用法如下,通过注解的方式将要读取的值映射到这个字段上面,然后就可以直接使用了。
@restcontroller public class configcontroller { /** * 读取application.properties中的配置值 */ @value("${server.context-path}") private string contextpath; @requestmapping("/config/contextpath") object getconfigcontextpath() { return contextpath; } }
获取contextpath http://localhost/spring-boot/config/contextpath
自定义配置文件读取方式
系统自带的application.properties是配置一些框架相关的参数,当我们有一些关于业务方面的配置,如果配置在application.properties中就有点不合适了,这个时候就需要自定义配置文件了。
在没用spring boot之前也是建个属性文件,然后里面配置好值,用工具类去读取
当然也可以用spring提供的propertiesfactorybean去读取,现在读取就更简单了
这边可以直接将配置信息映射成实体类,方便使用,首先定义个配置实体类
@configurationproperties(locations = "classpath:config.properties", prefix = "config") @component public class config { @notempty private string ip; private int port; public string getip() { return ip; } public void setip(string ip) { this.ip = ip; } public int getport() { return port; } public void setport(int port) { this.port = port; } }
加上@component和@configurationproperties注解
@configurationproperties中的locations用来指定你配置文件所在的路径
@configurationproperties中的prefix用来指定你配置名称的前缀,如config.ip, config就是你上面定义的前缀
@configurationproperties注解用的特别多,在很多starter包中都使用到了,比
如说mongodb的配置类:
@configurationproperties(prefix = "spring.data.mongodb") public class mongoproperties { /** * default port used when the configured port is {@code null}. */ public static final int default_port = 27017; /** * mongo server host. */ private string host; /** * mongo server port. */ private integer port = null; // .... }
这边在ip字段上还加了个@notempty注解来防止忘记配置值了,如果你没配置ip的值,那么在启动的程序的时候框架将提示你
*************************** application failed to start *************************** description: binding to target com.cxytiandi.config.config@2af616d3 failed: property: config.ip value: null reason: 不能为空 action: update your application's configuration 然后我们创建个config.properties放在classpath下 config.ip=192.168.1.1 config.port=8080 使用就直接注入config类就行了 @restcontroller public class configcontroller { @autowired private config config; @requestmapping("/config") object queryconfig() { return config; } }
这边通过地址获取下配置信息:http://localhost/spring-boot/config 可以看到结果
{"ip":"192.168.1.1","port":8080}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
SpringBoot 源码解析 (七)----- Spring Boot的核心能力 - SpringBoot如何实现SpringMvc的?
-
Spring 使用JavaConfig实现配置的方法步骤
-
spring boot启动时加载外部配置文件的方法
-
Spring Boot实现STOMP协议的WebSocket的方法步骤
-
使用Spring Boot和AspectJ实现方法跟踪基础结构
-
Shell实现读取ini格式配置文件方法
-
Spring Boot使用yml格式进行配置的方法
-
Spring Boot 日志配置方法(超详细)
-
spring boot devtools在Idea中实现热部署方法
-
Spring Boot 配置 IDEA和DevTools 热部署的方法