【原创】SpringBoot 这几种配置文件方式,你都用过吗?
关注公众号“Java 后端技术全栈”**
回复“面试”获取全套大厂面试资料
SpringBoot 有这几种操作配置文件方式,你都用过吗?
虽说 SpringBoot 相对 SpringMVC 来说,配置文件少了很多。但是在日志开发中,还是存在不少配置项需要配置。
以下几种场景:
自定义配置项
将配置项封装为一个对象
自定义配置文件
每个环境对应一套配置
前期准备,搞一个 SpringBoot 项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/...d">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件 application.properties(可以是 application.yml 或者 application.yaml)。每个人的喜好不一样。
在配置文件里自定义配置项
myName=zhangsan
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
如何读取自定义配置项
@Controller
@RequestMapping("/properties")
public class TestController {
@Value("${myName}")
private String myName;
@GetMapping("/test")
@ResponseBody
public String test() {
System.out.println(myName);
return myName;
}
}
然后启动项目 DemoApplication.java 的 main 方法。
请求:http://localhost:8080/properties/test
输出
zhangsan
将多个配置项封装为一个对象
通常比如需要把第三方的信息配置到配置文件里。比如说某网站的网址、用户名、密码。
application.properties 文件中添加配置项
wangzhan.url=htt://abc.com
wangzhan.userName=root
wangzhan.password=123456
@ConfigurationProperties(prefix = "wangzhan")
@Component
public class WangzhanConfigBean {
private String url;
private String userName;
private String password;
//get set 省略
}
使用
@RestController()
public class TestController {
@Resource
private WangzhanConfigBean wangzhanConfigBean;
@GetMapping("/test")
public String test() {
String url = wangzhanConfigBean.getUrl();
System.out.println(url);
String userName = wangzhanConfigBean.getUserName();
System.out.println(userName);
String password = wangzhanConfigBean.getPassword();
System.out.println(password);
return "ok";
}
}
请求地址:http://localhost:8080/test
输出
htt://abc.com
root
123456
这样我们平时需要自定义配置项的时候,就可以使用上面两种方式解决了。
但是还有一种方式,那就是如果我想自定义配置文件,想在自定义配置文件里进行配置。那又该怎么办呢?
如何读取自定义配置文件内容
比如说,我这里自定义一个配置文件 test.properties。
内容
自定义配置文件
user.userName=zhangsan
user.age=22
user.id=1000001
如何读取呢?
@Configuration
@PropertySource(value = "classpath:test.properties")
@ConfigurationProperties(prefix = "user")
public class UserConfig {
private String userName;
private Integer age;
private Integer id;
//省略 get set
}
使用 UserConfig
@RestController()
public class UserController {
@Resource
private UserConfig userConfig;
@GetMapping("/user/{id}")
public String queryUserNameById(@PathVariable("id") Integer id) {
System.out.println(userConfig.getUserName());
return "ok";
}
}
请求地址:http://localhost:8080/user/1
输出
zhangsan
是不是很简单呢?
在工作中,肯定会有开发环境、测试环境、线上环境。这三个还是比较常规的,有的还有灰度环境等。这时候就需要配置多套配置了,那怎么处理起来比较方便呢?
每个环境各自一个配置文件
dev 端口改成 8081
test 端口改成 8082
prod 端口改成 8083
现在是开发环境,怎么使用我们配置文件是 dev 呢?
只需要把 application.properties 文件清空,然后写入内容
spring.profiles.active=dev
然后启动项目。细心的人会发现,启动日志里会有这么一段日志:
这就是指明了,我们使用的是 dev 这个配置文件。然后再看看端口是不是我们前面所说的 8081
访问一下,前面的自定义配置文件的那个链接
明细之前的 8080 端口是不能访问了。那么我们换成 8081
成功。并且输出
OK。搞定。
推荐阅读
版权声明: 本文为 InfoQ 作者【田维常】的原创文章。
原文链接:【http://xie.infoq.cn/article/b204404a8613329bf20e47f4c】。文章转载请联系作者。
评论