一、配置文件介绍
在springboot项目中,系统默认会在src/main/Java/resources目录下创建一个application.properties。该全局配置文件的作用是对一些默认配置的配置值进行修改,包括项目中的数据库配置、缓存配置、相关变量配置、端口配置、日志配置等。
二、配置分类
springboot支持.properties
和.yml
文件。
1、.properties文件
采用等式(key–value)配置,例如server.port=8080
表示项目端口使用8080端口。
2、.yml文件
采用梯级呈现的的配置,例如
server:
port: 8080
也表示配置端口号。
备注:yml文件配置需要注意点:
- 不同“等级” 用冒号隔开,例如server是第一级,port是第二级;
- 次等级的前面是空格,如果配置不正确的话会有提示(变量变灰),例如port前面是一个空格;
- 冒号之后如果有值,那么冒号和值之间至少有一个空格,例如8080前有个空格。
三、多文件配置
在现实的开发环境中,我们需要不同的配置环境;格式为application-{profile}.properties或者application-{profile}.yml(注意前面的application要一致),其中{profile}对应你的环境标识,比如:
application-test.properties:测试环境,用于测试环境中
application-dev.properties:开发环境,在开发的时候使用
application-prod.properties:生产环境,用于上线环境
例如:在dev 文件中的端口号设置为:
server:
port: 8081
而prod文件中的端口号设置为:
server:
port: 8082
在application.yml中添加:
spring:
profiles:
active: dev
表示使用开发环境,该文件中的环境配置变量就是该文件中的值,该项目的端口号为8081。
四、读取配置
在springboot项目中一般会自动去读取配置文件中的配置信息,但是对于自定义的相关变量取值需要使用如下代码:
1、配置文件
server:
port: 8081
name:
lxw
age:
25
2、测试文件
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author: lxw
* @Date: 2018/10/19 19:36
* @email: 1229703575@qq.com
* @Description: 测试文件
*/
@RestController
@RequestMapping("/")
public class TestContoller {
//采用@Value注解获取配置文件中的变量值
@Value("${name}")
private String name;
@Value("${age}")
private int age;
//打印输出
@RequestMapping(value = "/hello")
public String hello() {
return name + ":" + age;
}
}
3、结果
五、自定义配置文件
有时候需要配置一些自定义的xml
配置文件,或者自定义命名的properties
文件,例如test.properties,这时候获取文件的配置信息就会不一样了。
1、xml文件配置
例如:logback-spring.xml
(springboot中的logback日志配置)
<?xml version="1.0" encoding="UTF-8"?>
<!-- 分级别异步文件日志输出配置 -->
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<jmxConfigurator/>
<!-- 日志输出路径,自定义 -->
<property name="LOG_HOME" value="./logs"/>
<!-- 按照每天生成日志文件 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/liuxw.%d{yyyy-MM-dd}.log
</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L -%msg%n</pattern>
</encoder>
<!--日志文件最大的大小 -->
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
这时候需要在application.yml文件中添加以下代码将xml文件引入到配置中。
logging:
config: classpath:logback-spring.xml
2、application.yml文件配置
例如:
pom文件引入如下包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
配置文件如下:
com:
name:
lxw
age:
25
配置一个类来进行接收
@Component
@ConfigurationProperties(prefix = "com") //变量前缀
public class Test{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
使用输出:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author: lxw
* @Date: 2018/10/19 19:36
* @email: 1229703575@qq.com
* @Description: 测试文件
*/
@RestController
@RequestMapping("/")
public class TestContoller {
@Autowired
private Test test; //实体类添加@Configuration 后才能使用
@RequestMapping(value = "/test")
public String test() {
return test.getName() + ":" + test.getAge();
}
}
版本问题
使用的是1.5以前的版本,那么可以通过locations指定properties文件的位置,
@ConfigurationProperties(prefix = "com",locations="test.properties")
但是1.5版本后就没有这个属性了。
以上就是在springboot中常用的配置过程,有些可能会因为版本不一样而导致一些差距,可以自行检查其不同之处。