附 5 springboot之配置文件

本文转载自http://www.jianshu.com/p/80621291373b,作者:龙白一梦 我的boss

代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境的配置都不一样,同时要方便各种角色如运维,接口测试, 功能测试,全链路测试的配置,hardcode 肯定不合适,如Spring profile一样写在jar包不合适.分布式应用中一般采用集中管理配置的方式,通过使用开源软件,如阿里的diamond,netflix的consul等等,SpringBoot中提供了各种各样的配置方式,下面一一来分析下.

1.配置方式和优先级

这些方式优先级如下:
a. 命令行参数
b. 来自java:comp/env的JNDI属性
c. Java系统属性(System.getProperties())
d. 操作系统环境变量
e. RandomValuePropertySource配置的random.*属性值
f. jar外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
g. jar内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
h. jar外部的application.properties或application.yml(不带spring.profile)配置文件
i. jar内部的application.properties或application.yml(不带spring.profile)配置文件
j. @Configuration注解类上的@PropertySource
k. 通过SpringApplication.setDefaultProperties指定的默认属性

2.命令行参数

@Componentpublic
class UserProperties {
    @Value("${myname}")
    private  String myname;
}

启动命令: java -jar *.jar --myname="KevinSun"
其他java 系统属性, 操作系统属性都是类似处理方案如果不想通过命令行启动 可以用下面方法取消.

SpringApplication.setAddCommandLineProperties(false);

3. application-{profile}.properties参数加载

不同的环境可能需要不同配置,可以通过
application{profile}.properties来解决这个问题.
首先:新建application-dev..properties 文件,增加需要参数其次启动命令:

  java -jar  ***.jar  --spring.profiles.active=dev

application-{profile}.properties 文件和默认的application.properties的加载方式本质是一致的,可以参照4中的内容.需要注意的是:application.properties 会首先被加载.

然后:从application-{profile}.properties中获取替换,所以一些基本固定的值可以写在application.properties, 然后个性化配置写在application-{profile}.properties中。

具体用法参照我的:第十四章 springboot + profile(不同环境读取不同配置)

4.application.properties 参数加载

SpringBoot中默认的从application.properties文件中加载参数,大量情况下默认是写在这个文件中的.
a. application.properties 读取的优先级
i. file:./config/ 当前jar目录的config
ii. file:./ 当前jar目录
iii. classpath:/config/ jar包中classpath的 config目录下
iv. classpath:/ jar包中classpath 路径下
排列的顺序 就是 加载的优先级,application.properties只会被加载一次
b. 使用自定义文件
如果你觉得 application.properties不够酷,你可以定义自己的文件名, 这里也有两种方式
i. 使用命令

  java -jar  ***.jar --spring.config.name=myproject

这时就会加载myproject.propertie并且 application.properties不会被加载的.
ii. 使用命令

 java -jar  ***.jar  spring.config.location=classpath:/myproject.properties

这种情况下 application.properties也是会被加载,使用方式application-{profile}.properties相同.
c. 使用${}进行属性占位符替换

spring.data.mongodb.host=192.168.1.1
spring.data.mongodb.port=1234
spring.data1.mongodb.host=${spring.data.mongodb.host}_test
spring.data1.mongodb.port=${spring.data.mongodb.port}_test
spring.data1.mongodb.database=${random.value}_test

注意最后一个配置,这使用random 生产随机值的方式, 在测试中可以用来造数据。
d. 类型安全加载
使用@value 进行属性的注入有的时候可能比较笨重, spring 提供一种强类型的bean 来替代这种方式

@Configuration
@EnableConfigurationProperties(UserProperties.class)
public class MyConfiguration{

}
@Component
@ConfigurationProperties(prefix = "spring.data.mongodb")
public class UserProperties {
    private  String host;
    private  int prot;

}
spring.data.mongodb.host=192.168.1.1
spring.data.mongodb.port=1234

文/龙白一梦(简书作者)
原文链接:http://www.jianshu.com/p/80621291373b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-11-07 16:26:01

附 5 springboot之配置文件的相关文章

springboot读取配置文件的顺序

前言 今天测试一些东西,发现配置文件连接的数据库一直不正常,数据也不对,今天请教了之后,原来springboot的配置文件加载不仅仅是项目内的配置文件. 正文 项目目录是这样的:文件夹下有:项目,application.properties文件(用于修改配置文件的时候直接复制到项目中) 结果:项目每次使用的都是项目外部的配置文件!!通过查询得到springboot项目启动的时候配置文件加载的顺序:(来自springboot官方文档,使用浏览器翻译) 也就是说:springboot会默认先加载项目

SpringBoot:配置文件

SpringBoot:配置文件 配置文件 SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的 application.properties application.yml 配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了:什么是YAML YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写. 在开发的这种语言时,YAML 的意思其实是:&

SpringBoot环境配置文件

SpringBoot环境配置文件 Spring Boot可针对不同的环境提供不同的Profile文件. Profile文件的默认命名格式为application-{env}.yml 使用spring.profiles.active选项来指定不同的profile 学习视频: http://www.itlaoqi.com/chapter/1685.html 源码地址: QQ群 814077650 , 群共享中自助下载 老齐的官网: itlaoqi.com (更多干货就在其中) application

SpringBoot系列:二、SpringBoot的配置文件

SpringBoot的配置文件在resources文件夹下 springboot的配置文件支持两种形式的写法,一种是经典的properties另一种是yml yml通过空格缩进的形式来表示对象的层级关系,这里采用yml方法来示例,如果你之前写过k8s的容器文件话那就更容易上手了 首先要把文件的编码格式设置成UTF-8不然会中文乱码 更改配置文件的文件后缀为yml,然后编写配置文件 server:port可以设置springboot的启动端口 然后我们在控制器中声明几个属性来拿配置文件的值,然后通

SpringBoot日志配置文件不生效

SpringBoot日志配置文件不生效是因为配置文件重复!!! SpringBoot项目中默认有一份日志配置文件,项目启动时先读取到了默认日志配置文件,没有读取resource目录中的配置文件,需要自定义日志信息的话需要在Springboot配置文件中指定读取自定义的配置文件 logging.config=classpath:log4j2.properties//设置使用日志路径 而且,默认的配置文件其实用着也还行,如果使用默认日志的话,输出控制台的级别是INFO,需要将日志信息持久化可以这样写

springboot(7)配置文件自动映射

SpringBoot注解配置文件自动映射到属性和实体类 Controller上面配置 @Component @PropertySource({"classpath:application.properties"}) @ConfigurationProperties 属性上面配置 @Value("${test.name}") 原文地址:https://www.cnblogs.com/xeclass/p/12635245.html

Springboot读取配置文件及自定义配置文件

1.创建maven工程,在pom文件中添加依赖 1 <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version>1.5.9.RELEASE</version> 5 </parent> 6 7 <dependencies>

Springboot读取配置文件的两种方法

第一种: application.yml配置中的参数: zip: Hello Springboot 方法读取: @RestController public class ControllerTest { //在这里读取配置文件 @Value("${zip}") private String zip; @GetMapping(value = "hello") public String hello(){ return zip; } } 第一种比较麻烦,推荐第二种: 首

springBoot之配置文件的读取以及过滤器和拦截器的使用

前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务.但是想将之前的工程作为一个项目来说,那些是仅仅不够的.可能还需要获取自定义的配置以及添加过滤器和拦截器.至于为什么将这些写在一起,只是因为这些比较简单而且也会经常用到,所以干脆就一起写出来了. 读取配置文件 在使用maven项目中,配置文件会放在resources根目录下. 我们的springBoot是用Maven搭建的,所以springBoot的默认配置文件和自定义的配置文件都放在此目录. springBoot