一、application.properties的位置

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

2.当前目录下

3.classpath根目录的“/config”包下

4.classpath的根目录下

spring会从classpath下的/config目录或者classpath的根目录查找application.properties或application.yml。

/config优先于classpath根目录

说明:

  1. 1,2两项适合生产环境,可以直接跟jar包放在同级目录下
  2. 如果同时在四个地方都有配置文件,配置文件的优先级是从1到4。
  3. 使用配置文件之后,spring boo启动时,会自动把配置信息读取到spring容器中,并覆盖spring boot的默认配置

SpringBoot的配置方式有很多,它们的优先级如下所示(优先级递减顺序):

  1. 命令行参数
  2. 来自java:comp/env的JNDI属性
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource配置的random.*属性值
  6. jar包外部的application-{profile}.propertiesapplication.yml(带spring.profile)配置文件
  7. jar包内部的application-{profile}.propertiesapplication.yml(带spring.profile)配置文件
  8. jar包外部的application.propertiesapplication.yml(不带spring.profile)配置文件
  9. jar包内部的application.propertiesapplication.yml(不带spring.profile)配置文件
  10. @Configuration注解类上的@PropertySource
  11. 通过SpringApplication.setDefaultProperties指定的默认属性

因为jar包外部的优先级高,所以可以运行时指定application.properties的位置。

以上配置方式虽然挺多,实际用到的只有一两种。

二、 通过命令行来配置少量项

SpringBoot可以不依赖Tomcat容器,作为单应用启动。这时,可以通过命令行来控制运行参数。

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

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

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

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

三、 使用@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 !!";
}
}

@Value注解有好几种姿势:

1. #{expression?:default value}

@Value("#{systemProjecties['mongodb.port']?:27017}")
private String mongodbPort;
@Value("#{config['mongodb.url']?:'127.0.0.1'}")
private String mongodbUrl;
@Value("#{aBean.age ?:21}")
private int age;

2. ${property:default value}

//@propertySource("classpath:/config.properties")
//configuration
@Value("${mongodb.url:127.0.0.1}")
private String mongodbUrl;
@Value("#{'${mongodb.url:172.0.0.1}'}")
private String mongoUrl;
@Value("#config['mongodb.url']?:'127.0.0.1'")
private String mogodbUrl;

配置文件config.property如下:

mogodb.url = 1.2.3.4
mogodb.db = hello

3. 注意

Must register a static PropertySourcesPlaceholderConfiger bean in either XML or annotation ,so that Spring @Value konw how to interpret ${}

//@PropertySource("classpath:/config.properties}")
//@Configuration
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigIn() {
return new PropertySourcesPlaceholderConfigurer();
}

四、 属性的引用

myapp.name=spring
myapp.desc=${myapp.name} nice
SpringBoot提供以下特殊引用:
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]}

五、 自定义配置信息

@Component
public 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");

六、SpringBoot自带的配置属性

常用属性如日志,端口配置

# LOGGING
logging.path=/var/logs
logging.file=myapp.log
logging.config= # location of config file (default classpath:logback.xml for logback)
logging.level.*= # levels for loggers, e.g. "logging.level.org.springframework=DEBUG" (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF) # EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8080
server.address= # bind to a specific NIC
server.session-timeout= # session timeout in seconds
server.context-parameters.*= # Servlet context init parameters, e.g. server.context-parameters.a=alpha
server.context-path= # the context path, defaults to '/'
server.servlet-path= # the servlet path, defaults to '/'

更多属性参见官网文档

@ContextConfiguration

@ContextConfiguration(locations={"classpath*:mongodb.xml"})

七、属性名匹配规则

例如有如下配置对象:

@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings { private String firstName; }

firstName可以使用的属性名如下:

person.firstName,标准的驼峰式命名

person.first-name,虚线(-)分割方式,推荐在.properties和.yml配置文件中使用

PERSON_FIRST_NAME,大写下划线形式,建议在系统环境变量中使用

参考资料

偶尔记一下

深入理解SpringBoot配置的更多相关文章

  1. SpringBoot配置Aop笔记【例子】

    众所周知,spring最核心的两个功能是aop和ioc,即面向切面,控制反转.这里我们探讨一下如何使用spring aop. 1.何为aop aop全称Aspect Oriented Programm ...

  2. SpringBoot 配置 Tomcat SSL

    SpringBoot 配置 Tomcat SSL SSL(Secure Sockets Layer , 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密 ...

  3. 深入理解SpringBoot核心机制《spring-boot-starter》

    深入理解SpringBoot核心机制<spring-boot-starter> 前言: 对于这几年java火爆天的springBoot我相信大家都有所使用过,在springBoot的项目中 ...

  4. SpringBoot配置属性之Server

    SpringBoot配置属性系列 SpringBoot配置属性之MVC SpringBoot配置属性之Server SpringBoot配置属性之DataSource SpringBoot配置属性之N ...

  5. Nginx模块开发-理解HTTP配置

    理解HTTP配置 相关数据结构 先明白Nginx下述数据结构,再理解 HTTP配置的解析与合并过程 ngx_module_t 官方API typedef struct{ NGX_MODULE_V1; ...

  6. SpringBoot基础系列-SpringBoot配置

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html SpringBoot基础系列-SpringBoot配置 概述 属性 ...

  7. springboot上传文件 & 不配置虚拟路径访问服务器图片 & springboot配置日期的格式化方式 & Springboot配置日期转换器

    1.    Springboot上传文件 springboot的文件上传不用配置拦截器,其上传方法与SpringMVC一样 @RequestMapping("/uploadPicture&q ...

  8. springboot配置Druid数据源

    springboot配置druid数据源 Author:SimpleWu springboot整合篇 前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringDa ...

  9. springboot配置详解

    springboot配置详解 Author:SimpleWu properteis文件属性参考大全 springboot默认加载配置 SpringBoot使用两种全局的配置文件,全局配置文件可以对一些 ...

随机推荐

  1. 实现Hadoop的Writable接口Implementing Writable interface of Hadoop

    As we saw in the previous posts, Hadoop makes an heavy use of network transmissions for executing it ...

  2. scala编程第18章学习笔记——有状态的对象

    银行账号的简化实现: scala> class BankAccount{ | private var bal: Int = 0 | def balance: Int = bal | def de ...

  3. Redis中对Key进行分类

    使用":"体现层次 >set key1:key2:key4 value1 "OK" >set key1:key2:key5 value2 " ...

  4. WhyDX9:翻写D3D红龙书中的程序

    之前写过一套学习OpenGL的框架:WhyGL,即然有了GL那也应该再写个学习D3D的框架:WhyDX9.两个程序的架构相同,然后这个程序是将D3D红龙那本书的DEMO翻写了一遍.先将可执行程序发一下 ...

  5. QtWebKit

    WekKit官网:http://www.webkit.org/ QtWebKit官网及安装:http://trac.webkit.org/wiki/QtWebKit#GettingInvolved Q ...

  6. Java 与 JavaScript 对websocket的使用

    ebsocket,HTML5中新一代全双工通信协议.其底层仍然是http协议. 传统 HTTP 请求响应客户端服务器交互图 WebSocket 请求响应客户端服务器交互图 WebSocket 客户端支 ...

  7. 【Linux】Linux中 “there are stopped jobs”问题的解决方案

    在用管理员执行一个命令后,我用Ctrl+Z把命令转移到了后台天.导致我无法退出root的. 输入命令:logout终端显示:There are stopped jobs. 解决方法:输入命令:jobs ...

  8. 解决bootstrap和jquey中的.button扩展冲突的问题。

     

  9. C++变量未进行初始化时的默认值

      对于built-in类型,未初始化的变量的值是undefined value. 对于自定义类型,未初始化变量的值是类型默认构造函数指定的值.  

  10. php5.2以下版本无json_decode函数的解决办法

    function json_decode2($json) { $comment = false; $out = '$x=';   for ($i=0; $i<strlen($json); $i+ ...