Spring Boot配置读取实现方法解析
SpringBoot里面所有的配置信息都放在application.properties中,如果我们想读取配置中的值要怎么做呢?
还需要自己写个读取属性文件的工具类吗?完全不要,我们可以通过各种方式来读取里面的值。
当然写工具类也是一种方式,只是太麻烦了,既然SpringBoot中有封装好的实现,为什么不用。
Environment方式读取
框架中有一个org.springframework.core.env.Environment类,可以读取application.properties中配置的值。
用法如下,我们可以看到直接将Environment注入进来,然后就可以使用getProperty方法来获取配置的值了,参数是配置的名称。
@RestController publicclassConfigController{ @Autowired privateEnvironmentenv; /** *通过配置的key获取value
*{key:.+}是为了解决通过url参数访问的时候小数点丢失的问题 *@paramkey *@return */ @RequestMapping("/config/{key:.+}") ObjectgetConfig(@PathVariableStringkey){ returnenv.getProperty(key); } }
我们获取下之前配置的tomcat端口,http://localhost/spring-boot/config/server.port可以看到输出的结果正是你配置的值。
@Value注解方式读取
用法如下,通过注解的方式将要读取的值映射到这个字段上面,然后就可以直接使用了。
@RestController publicclassConfigController{ /** *读取application.properties中的配置值 */ @Value("${server.context-path}") privateStringcontextPath; @RequestMapping("/config/contextpath") ObjectgetConfigContextPath(){ returncontextPath; } }
获取contextPathhttp://localhost/spring-boot/config/contextpath
自定义配置文件读取方式
系统自带的application.properties是配置一些框架相关的参数,当我们有一些关于业务方面的配置,如果配置在application.properties中就有点不合适了,这个时候就需要自定义配置文件了。
在没用SpringBoot之前也是建个属性文件,然后里面配置好值,用工具类去读取
当然也可以用Spring提供的PropertiesFactoryBean去读取,现在读取就更简单了
这边可以直接将配置信息映射成实体类,方便使用,首先定义个配置实体类
@ConfigurationProperties(locations="classpath:config.properties",prefix="config") @Component publicclassConfig{ @NotEmpty privateStringip; privateintport; publicStringgetIp(){ returnip; } publicvoidsetIp(Stringip){ this.ip=ip; } publicintgetPort(){ returnport; } publicvoidsetPort(intport){ this.port=port; } }
加上@Component和@ConfigurationProperties注解
@ConfigurationProperties中的locations用来指定你配置文件所在的路径
@ConfigurationProperties中的prefix用来指定你配置名称的前缀,如config.ip,config就是你上面定义的前缀
@ConfigurationProperties注解用的特别多,在很多starter包中都使用到了,比
如说mongodb的配置类:
@ConfigurationProperties(prefix="spring.data.mongodb") publicclassMongoProperties{ /** *Defaultportusedwhentheconfiguredportis{@codenull}. */ publicstaticfinalintDEFAULT_PORT=27017; /** *Mongoserverhost. */ privateStringhost; /** *Mongoserverport. */ privateIntegerport=null; //.... }
这边在ip字段上还加了个@NotEmpty注解来防止忘记配置值了,如果你没配置ip的值,那么在启动的程序的时候框架将提示你
*************************** APPLICATIONFAILEDTOSTART *************************** Description: Bindingtotargetcom.cxytiandi.config.Config@2af616d3failed: Property:config.ip Value:null Reason:不能为空 Action: Updateyourapplication'sconfiguration 然后我们创建个config.properties放在classpath下 config.ip=192.168.1.1 config.port=8080 使用就直接注入Config类就行了 @RestController publicclassConfigController{ @Autowired privateConfigconfig; @RequestMapping("/config") ObjectqueryConfig(){ returnconfig; } }
这边通过地址获取下配置信息:http://localhost/spring-boot/config可以看到结果
{"ip":"192.168.1.1","port":8080}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。