springboot之配置文件
springboot在加载配置文件的时候是有先后顺序的,了解加载配置文件的先后顺序,可以减少编写程序出现错误
1 springboot加载配置文件的先后顺序如下:
SpringApplication
将从以下位置加载application.properties
文件,并把它们添加到Spring Environment
中:
- 当前目录下的
/config
子目录。 - 当前目录。
- classpath下的
/config
包。 - classpath根路径(root)
启动的时候,1中的配置文件优先级最高,会覆盖2,3,4中的配置信息
2 工程结构如图:
代码如下:
package com.rookie.bigdata.config; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* 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]}
* <p>
* <p>
* Created by on 2018/9/29.
*/
@Component
//此注解可以省略
//@ConfigurationProperties
public class RandomConfig { @Value("${random.value}")
private String secret;
@Value("${random.long}")
private Long number; @Value("${random.int(10)}")
private String numberLess; @Value("${random.int[1024,65536]}")
private Integer numberRange; @Value("${name}")
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSecret() {
return secret;
} public void setSecret(String secret) {
this.secret = secret;
} public Long getNumber() {
return number;
} public void setNumber(Long number) {
this.number = number;
} public String getNumberLess() {
return numberLess;
} public void setNumberLess(String numberLess) {
this.numberLess = numberLess;
} public Integer getNumberRange() {
return numberRange;
} public void setNumberRange(Integer numberRange) {
this.numberRange = numberRange;
}
}
package com.rookie.bigdata.config; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; /**
*
* springboot允许使用占位符进行配置
* Created by on 2018/9/29.
*/
@Component
public class AppConfig {
@Value("${app.name}")
private String appName;
@Value("${app.description}")
private String appDesc; public String getAppName() {
return appName;
} public void setAppName(String appName) {
this.appName = appName;
} public String getAppDesc() {
return appDesc;
} public void setAppDesc(String appDesc) {
this.appDesc = appDesc;
}
}
package com.rookie.bigdata; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* 应用程序启动类
* Created by on 2018/8/2.
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication();
//通过设置该参数禁用命令行属性添加到Environment
// springApplication.setAddCommandLineProperties(false); springApplication.run(Application.class, args); }
}
package com.rookie.bigdata.config; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.*; /**
* Created by liuxili on 2018/9/29.
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class AppConfigTest { @Autowired
AppConfig appConfig; @Test
public void test1() {
System.out.println(appConfig.getAppName());
System.out.println(appConfig.getAppDesc());
} }
package com.rookie.bigdata.config; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.*; /**
* Created by liuxili on 2018/9/29.
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class RandomConfigTest { @Autowired
RandomConfig randomConfig; @Test
public void test1(){
System.out.println(randomConfig.getSecret());
System.out.println(randomConfig.getNumber());
System.out.println(randomConfig.getNumberLess());
System.out.println(randomConfig.getNumberRange());
System.out.println(randomConfig.getName());
}
}
配置文件如下
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]}
name=lisi
#属性占位符
#当使用application.properties定义的属性时,Spring会先通过已经存在的Environment查找该属性,所以你可以引用事先定义的值
app.name=appStore
app.description=${app.name} is a Spring Boot application connection.username=root
connection.password=roots
3、使用@Value("${property}")注解注入配置属性有时会比较麻烦,特别是需要使用多个properties,或数据本身有层次结构。Spring Boot提供一种使用配置的替代方法,这种方法允许强类型的beans以管理和校验应用的配置,代码如下:
package com.rookie.bigdata.config; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component; /**
* Created by liuxili on 2018/9/29.
*/
//@Component
@Configuration
@ConfigurationProperties(prefix = "connection")
public class ConnectionConfig { private String userName; private String passWord; public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPassWord() {
return passWord;
} public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
package com.rookie.bigdata.config; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.*; /**
* Created by liuxili on 2018/9/29.
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class ConnectionConfigTest { @Autowired
private ConnectionConfig connectionConfig; @Test
public void test1(){
System.out.println(connectionConfig.getPassWord());
System.out.println(connectionConfig.getUserName());
}
}
属性名配置一般规则如下:
属性 | 说明 |
---|---|
person.firstName |
标准驼峰规则 |
person.first-name |
虚线表示,推荐用于.properties 和.yml 文件中 |
person.first_name |
下划线表示,用于.properties 和.yml 文件的可选格式 |
PERSON_FIRST_NAME |
大写形式,使用系统环境变量时推荐 |
对于使用yml文件配置跟这里配置差不多,这里不再赘述,看个人喜好,有人喜好properties进行配置,有人喜好yml文件进行配置
springboot之配置文件的更多相关文章
- SpringBoot之配置文件加载位置
1.SpringBoot启动会扫描application.properties或者application.yml文件作为springboot的配置文件.默认创建项目生成application.prop ...
- [SpringBoot] - 了解什么是SpringBoot,使用SpringBoot的配置文件
首先明白Spring是什么,Spring是Java开发的一个框架,为了方便简化Java开发. 什么是注解(注解式开发)? Spring的常用注解有哪些? 假如用SpringBoot构建一个网站程序,应 ...
- springboot读取配置文件的顺序
前言 今天测试一些东西,发现配置文件连接的数据库一直不正常,数据也不对,今天请教了之后,原来springboot的配置文件加载不仅仅是项目内的配置文件. 正文 项目目录是这样的:文件夹下有:项目,ap ...
- SpringBoot读取配置文件源码探究
1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...
- springboot yml配置文件注入值
1.编写javabean: package com.example.springboot.bean; import org.springframework.boot.context.propertie ...
- SpringBoot:配置文件及自动配置原理
西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...
- SpringBoot系列:二、SpringBoot的配置文件
SpringBoot的配置文件在resources文件夹下 springboot的配置文件支持两种形式的写法,一种是经典的properties另一种是yml yml通过空格缩进的形式来表示对象的层级关 ...
- 「快学SpringBoot」配置文件的加载顺序和配置项默认值设置
前言 有的时候,配置信息是我们无法在开发过程中就能确定的.比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等.这时候,就需要把配置文件放在外面,让用户自定义配置部 ...
- springboot指定配置文件运行
1.springboot指定配置文件运行 创建三个配置文件如下: application.properties内容如下: spring.profiles.active=rabbit如上配置,在运行时就 ...
- SpringBoot(二) SpringBoot核心配置文件application.yml/properties
我们都知道在Spring中有着application.xml文件对Spring进行相关配置,通过web.xml中的contextConfigLocation指定application.xml文件所在位 ...
随机推荐
- Mesos源码分析(8): Mesos-Slave的初始化
Mesos-Slave的初始化在文件src/slave/slave.cpp里面 首先初始化资源预估器 初始化attributes 初始化hostname 初始化status ...
- 【RL-TCPnet网络教程】第36章 RL-TCPnet之FTP服务器
第36章 RL-TCPnet之FTP服务器 本章节为大家讲解RL-TCPnet的FTP服务器应用,学习本章节前,务必要优先学习第35章的FTP基础知识.有了这些基础知识之后,再搞本章节会有事 ...
- LeetCode724. 寻找数组的中心索引
1.题目描述 给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如果数组不存在中 ...
- [Swift]LeetCode709. 转换成小写字母 | To Lower Case
Implement function ToLowerCase() that has a string parameter str, and returns the same string in low ...
- [Swift]LeetCode806. 写字符串需要的行数 | Number of Lines To Write String
We are to write the letters of a given string S, from left to right into lines. Each line has maximu ...
- BBS论坛(三十一)
31.帖子加精和取消加精功能完成 (1)apps/models.py class HighLight(db.Model): __tablename__='highlight_post' id = db ...
- LinkedHashMap 底层分析
众所周知 HashMap 是一个无序的 Map,因为每次根据 key 的 hashcode 映射到 Entry 数组上,所以遍历出来的顺序并不是写入的顺序. 因此 JDK 推出一个基于 HashMap ...
- webdav 概览
webdav 概览 WebDav(Web Distributed Authoring and Versioning) 是一个控制远端Web资源的协议,它基于HTTP1.1.它的定义在RFC 4918( ...
- 洛谷:P1036:选数
题目描述 已知 nn 个整数 x1,x2,…,xnx1,x2,…,xn ,以及 11 个整数 kk ( k<nk<n ).从 nn 个整数中任选 kk 个整数相加,可分别得到一系列的 ...
- 为VIP解决问题时写的源码
平时为学生们解决问题时,建立的项目源代码,方便大家学习与讨论. 开源DEMO列表 1. https://github.com/bfyxzls/student_orderBy 2. https://gi ...