博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring boot 使用application.properties 进行外部配置
阅读量:2290 次
发布时间:2019-05-09

本文共 2995 字,大约阅读时间需要 9 分钟。

application.properties大家都不陌生,我们在开发的时候,经常使用它来配置一些可以手动修改而且不用编译的变量,这样的作用在于,打成war包或者jar用于生产环境时,我们可以手动修改环境变量而不用再重新编译。

spring boot允许你自定义一个application.properties文件,然后放在以下的地方,来重写spring boot的环境变量或者定义你自己环境变量

 

当前目录的 “/config”的子目录下

当前目录下

classpath根目录的“/config”包下

classpath的根目录下

1点和2点适合在生产环境下,例如,打包成可执行的jar包

这里要注意,“当前目录”是指demo.jar包的目录下,要使配置文件生效,在使用java -jar demo.jar的命令时,必须先路由到demo.jar包的路径下,再使用其命名,

3点和4点适合在开发环境下

如果同时在四个地方都有配置文件,配置文件的优先级是从1到4。

 

使用配置文件之后,spring boo启动时,会自动把配置信息读取到spring容器中,并覆盖spring boot的默认配置,那么,我们怎么来读取和设置这些配置信息呢

 

1.通过命令行来重写和配置环境变量,优先级最高,例如可以通过下面的命令来重写spring boot 内嵌tomcat的服务端口,注意“=”俩边不要有空格

 

java -jar demo.jar --server.port=9000

 

如果想要设置多个变量怎么办,可以已json的格式字符串来设置

 

java -jar demo.jar --spring.application.json='{"foo":"bar"}'

 

2.通过@value注解来读取

 

@RestController@RequestMapping("/task")public class TaskController {@Value("${connection.remoteAddress}") private String address;@RequestMapping(value = {"/",""})public String hellTask(@Value("${connection.username}")String name){    return "hello task !!";}}

 

3.通过Environment接口来获取,只需要把接口注进去即可

 

@RestController@RequestMapping("/task")public class TaskController {@Autowired Environment ev ;@Value("${connection.remoteAddress}") private String address;@RequestMapping(value = {"/",""})public String hellTask(@Value("${connection.username}")String name){    String password = ev.getProperty("connection.password");    return "hello task !!";}}

 

4.可以自定义一个工具类,来获取,这种方式关键在于读取配置文件信息,适合自定义的配置信息,spring 容器默认的配置信息会读不到

 

@Componentpublic class SystemConfig {    private static Properties props ;    public SystemConfig(){        try {            Resource resource = new ClassPathResource("/application.properties");//            props = PropertiesLoaderUtils.loadProperties(resource);        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 获取属性     * @param key     * @return     */    public static String getProperty(String key){        return props == null ? null :  props.getProperty(key);    }    /**     * 获取属性     * @param key 属性key     * @param defaultValue 属性value     * @return     */    public static String getProperty(String key,String defaultValue){         return props == null ? null : props.getProperty(key, defaultValue);    }    /**     * 获取properyies属性     * @return     */    public static Properties getProperties(){        return props;    }}//用的话,就直接这样子String value = SystemConfig.getProperty("key");

 

5.可以利用${…}在application.properties引用变量

 

myapp.name=springmyapp.desc=${myapp.name} nice

 

6.可以在application.properties配置随机变量,利用的是RandomValuePropertySource类

 

my.secret=${random.value}my.number=${random.int}my.bignumber=${random.long}my.number.less.than.ten=${random.int(10)}my.number.in.range=${random.int[1024,65536]}

 

简单的配置文件的使用就先写到这里,再看看其他高级用法,如Profiles还有@ConfigurationProperties

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:855801563

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代

转载地址:http://oybnb.baihongyu.com/

你可能感兴趣的文章
香!阿里P8手写3份满级“并发编程”笔记,原理→精通→实战
查看>>
五面美团后,我总结出美团面试四大难题:JVM+微服务+MySQL+Redis
查看>>
滴滴Java后台3面题目:网络+内存溢出+各种锁+高性能+消息队列
查看>>
大厂面试果然名不虚传,蚂蚁三面凉经,真的是“太难了”
查看>>
分享一次止于三面的阿里面试之旅,是我不配呀
查看>>
美团工作7年,精华全在这份学习笔记里了,已成功帮助多位朋友拿到5个大厂Offer
查看>>
淘宝架构师又出神作,Java异步编程实战笔记总结,彻底被征服
查看>>
深入OAuth2核心源码,阿里大佬的Spring Security手册惊呆我了
查看>>
普本毕业,阿里五面成功斩下offer,名校出身的我究竟输在哪?
查看>>
最新“美团+字节+腾讯”三面面经,你能撑到哪一面?
查看>>
三年Java开发,年底跳槽挂了阿里和字节,却收获美团offer,分享大厂面试心得
查看>>
4面全过之后还有交叉面,阿里面试也太“刺激”了
查看>>
手慢无!出自美团内部的精通Java并发编程手册,打倒高并发
查看>>
一线互联网大厂面经分享:阿里三面+头条四面+腾讯二面+美团四面
查看>>
快手三面(Java岗),意向已拿,盘点一下面试官都问了些啥?
查看>>
“刚刚”顺丰校招二面+美团社招三面面经,分享给准备冲刺金三银四的你
查看>>
多位阿里专家整理总结多线程与高并发实战开发手册,你都具备了?
查看>>
4面字节跳动,终于“跳进去”了 分享一波字节的面经
查看>>
阿里、字节等大厂Java面试汇总:心态准备+简历+50道高频面试题+面试经验总结
查看>>
阿里架构师吐血整理:从源码到架构的Spring全系列笔记,已全部分享
查看>>