Spring Boot加载配置文件
问题1:Spring如何加载配置,配置文件位置?
1、默认位置:
Spring Boot默认的配置文件名称为application.properties,SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Environment中:
- 当前目录下的/config子目录,
- 当前目录。
- 一个classpath下的/config包
- classpath根路径(root)
这个列表是按优先级排序的(列表中位置高的将覆盖位置低的)。并且,如果存在多个重名的application.properties。
注:Spring-boot配置文件的加载,先在与jar同级下查找,如果没有就去同级的config下查找;如果再没有,就在jar包中去查找相应的配置文件,如果再没有,就去jar包中的config下去查找。当查找到对应配置片段时,采用增量替换的方式来进行替换。
2、自定义位置:
如果不喜欢application.properties这个文件名或者需要自定义配置文件位置,在启动Spring应用的时候,可以传入一个spring.config.location参数指定配置文件位置,
例如:
java -jar xxxxx.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
上述例子加载了两个配置文件,分别位于根目录下的:default.properties,override.properties。
问题2:配置文件如何加载到类文件中?
配置文件application.properties中配置属性:
test.name = wahaha
test.age = 27
test.tel = 18800118888
1、@Component和@Value("${"xxx"}")
类文件:
@Component
public class Configurations {
@Value("${test.name}")
private String name;
@Value("${test.age}")
private String age;
@Value("${test.tel}")
private Long tel;
// getter and setter
}
在类域属性上通过@Value("${xxx}")指定关联属性,Spring Application会自动加载。
启动类:
@RestController
@SpringBootApplication
public class ApplicationStarter {
@Autowired
private Configuration configuration;
@RequestMapping("/")
public Map<String, Object> sayHello() {
Map<String, Object> result = new HashMap<String, Object>();
result.put("name", configuration.getName());
result.put("age", configuration.getAge());
result.put("tel", configuration.getTel());
return result;
}
public static void main(String[] args) throws Exception {
SpringApplication.run(ApplicationStarter.class, args);
}
}
运行,调用localhost:8080/会看到返回结果是:
{"name":"wahaha","tel":18800118888,"age":"27"}
2、@ConfigurationProperties(prefix = "test")
上述方法,手动书写@Value还是比较繁重的工作,好在Spring Boot提供了更简洁的方式。@ConfigurationProperties(prefix = "test")。prefix指定了配置文件的前缀为test,并且按照属性名进行自动匹配,例如:test.name属性值会自动加载到private String name域中。
@Component
@ConfigurationProperties(prefix = "test")
public class Configuration {
private String name;
private String age;
private Long tel;
// setter getter
}
PS:locations还能够指定自定义的配置文件位置,这里就不多说了。
@ConfigurationProperties(prefix = "test", locations = "classpath:xxxx.properties")
问题3:如何根据线上环境和线下环境加载不同的配置?如何加载多个配置文件?
1、Profiles:
Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。在配置文件中,用spring.profiles.active属性来指定特定环境的配置文件。在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-dev.properties:开发环境application-test.properties:测试环境application-prod.properties:生产环境
至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。例如:
application.properties配置:spring.profiles.active = dev即指定application-dev.properties会被加载。
2、通过启动参数指定运行环境。
通过命令行启动:
java -jar xxxxx.jar --spring.profiles.active=prod。
上述指定为prod环境,则spring application会自动根据application-{profile}.properties的格式找到application-prod.properties文件加载。
3、加载多个自定义文件。
例如:
spring.profiles.active = dev,database
等于告诉Spring Boot加载application-dev.properties和application-database.properties文件,从而实现多个配置文件的加载。
参见:https://my.oschina.net/wangyuefive/blog/704615#h3_4
Spring Boot加载配置文件的更多相关文章
- spring boot加载配置文件的顺序
四个默认加载配置文件地方的优先级,四个文件相同配置有优先级概念 不同位置相互补充 外部配置文件不建议使用,不符合maven项目结构,打包会打不进去
- Spring Boot加载application.properties配置文件顺序规则
SpringApplication会从以下路径加载所有的application.properties文件: 1.file:./config/(当前目录下的config文件夹) 2.file:./(当前 ...
- spring boot 加载web容器tomcat流程源码分析
spring boot 加载web容器tomcat流程源码分析 我本地的springboot版本是2.5.1,后面的分析都是基于这个版本 <parent> <groupId>o ...
- Spring中加载配置文件的方式
原文:http://blog.csdn.net/snowjlz/article/details/8158560 Spring 中加载XML配置文件的方式,好像有3种, XML是最常见的Spring 应 ...
- spring boot 加载自定义log4j 文件路径
spring boot 使用log4j 打印时,需首先去除自带 Logger ,然后加入log4j 依赖 <dependencies> <!-- https://mvnreposit ...
- Spring boot加载REACTIVE源码分析
一,加载REACTIVE相关自动配置 spring boot通过判断含org.springframework.web.reactive.DispatcherHandler字节文件就确定程序类型是REA ...
- spring boot 加载配置 文件
在springboot启动的过程中,默契情况下会在classpath路径下加载application.properties当做系统配置文件,但有时候我们想要替换成另一个文件,可以 通过以下方式: ...
- spring boot加载自定义配置
1.通过@Value 配置文件中 wechat: ssh: host: 192.0.1.1 port: 22 加载类 @Component @Data public class SftpConfig ...
- spring Boot加载bean
1.SpringBoot中加载bean,可以使用注解@compenent直接加载到applicationContext容器中 2.在直接类@Configuration中,手动注册bean,如:
随机推荐
- NSProxy
NSProxy类在分布式对象架构中是很重要的.由于作用比较特别,NSProxy在Cocoa程序中出现频率很低. NSProxy 是一个抽象类,它为一些表现的像是其它对象替身或者并不存在的对象定义一套A ...
- docker toolbox在win7下的安装
1.下载安装docker toolbox docker toolbox的下载地址: http://mirrors.aliyun.com/docker-toolbox/windows/docker-to ...
- 第七周 Word文档修订
come from:http://www.sxszjzx.com/~c20/12-2/office-gj/ 第七周 Word文档修订 教学时间 2013-4-8 教学课时 2 教案序号 12 教学目标 ...
- Serializable 介绍
今天咱们简单介绍一些serializable. 1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各 ...
- Unity3D调用android方法(非插件方式)
关于Unity3Dproject与androidproject的转换与合并,请參考我的另外一篇博客.假设你对Unity3Dproject增加到androidproject的过程不熟悉.也请先看完以下这 ...
- Bash shell 命令行 快捷键
http://linuxtoy.org/archives/bash-shortcuts.html 生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl ...
- postgresql修改配置生效方法
对于配置服务器,,太多时候我们在Linux中做的操作是,配置*.conf文件,然后重启服务.而很多服务都具有reload功能,而但是具体到某个配置,有时候直接说出需不需要重启服务而使得配置生效,这并不 ...
- ORA-01950: no privileges on tablespace xxx ORA-01950: 对表空间 'xxx'无权限
场景: 创建用户,在用户scheme下新建了一张表,插入数据时报错 ORA-01950: 对表空间 'xxx'无权限 创建用户 /*第1步:创建临时表空间 */ create temporary ta ...
- SICK TiM561激光雷达的使用
TIM系列激光扫描传感器原理: 激光发射器发出激光脉冲,当激光碰到物体后,部分激光反射回激光接收器.通过计算发射/接收脉冲时间差,可以计算出距离值.激光扫描器连续不停的发射激光脉冲,由旋转的光学机构将 ...
- code vs 2639 约会计划
code vs传送门 题目描述 Description cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错.然而,最关键的是,cc能够很好的调解各各 ...