基于Spring Boot的程序的配置读取方案
Posted 左直拳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Spring Boot的程序的配置读取方案相关的知识,希望对你有一定的参考价值。
从内置配置文件到外置配置管理,这是一个很大的进步。
基于Spring Boot的程序的配置读取,可以有2种方案。一是基础的,读取项目配置文件;二是读取外置的配置信息,比如利用nacos的配置管理服务,将配置写到nacos,程序运行时从nacos读取。
方案一方便快捷,方案二配置与程序解耦,修改十分方便。各有所长。
一、从项目配置文件读取
1、配置文件
将配置信息写在配置文件里,是基础的做法。配置文件有2种格式,*.properties
和 *.yml
。properties是键值对,干脆利落,但yml可读性更胜一筹。不过,application.properties的优先级比application.yml高,如果两个文件同时定义了同名的配置项,则以application.propertis中的为准。
通常,配置信息分为开发环境和生产环境,即将开发时的配置和正式部署时的配置区分。方法是分开写到2个配置文件里,比如开发环境的配置文件为application-dev.yml,生产环境的配置文件为application-pro.yml。它们分别定义在两种环境中不同的配置信息,而公有的、不随环境变化的信息可以定义在application.properties。
application-dev.yml
server:
port: 8085
token:
users: test
passwords: test1234
remote:
url: http://192.168.0.22:8083/gzdzzh/raindata
2、注册配置文件
在pom.xml里注册环境,不然配置文件不会被识别:
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
<maven.test.skip>true</maven.test.skip>
<scope.jar>compile</scope.jar>
</properties>
<!-- 使能 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>pro</id>
<properties>
<profileActive>pro</profileActive>
<maven.test.skip>true</maven.test.skip>
<scope.jar>provided</scope.jar>
</properties>
</profile>
</profiles>
3、使用哪种环境的配置文件
使用开发环境还是生产环境的配置文件?
首先在pom.xml指明(参考上面pom.xml的使能部分),然后在application.properties里引用。
application.properties
spring.profiles.active=@profileActive@
4、读取配置
代码中可以这样读取
@Component
public class AppConfig
@Value(value = "$token.users")
private String users;
@Value(value = "$token.passwords")
private String passwords;
public String[] getUsers()
return users.split(",");
public void setUsers(String users)
this.users = users;
public String[] getPasswords()
return passwords.split(",");
public void setPasswords(String passwords)
this.passwords = passwords;
5、发布
项目打包时,指定环境。比如本例准备部署到生产环境,则可以运行以下命令。其中-Ppro,就是指定按生产环境打包(见上面的pom.xml)。
call mvn clean package -Dmaven.test.skip=true -Ppro
可以将这个命令写在批处理文件里,该批处理文件放在项目根目录下。
二、从nacos读取
Nacos是阿里巴巴旗下产品,一个动态服务发现、配置管理和服务管理平台。
1、引入nacos
pom.xml
<!-- nacos -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.1</version>
</dependency>
2、编写配置文件
application-dev.yml
server:
port: 8085
nacos:
config:
server-addr: 192.168.0.141:8848
namespace: rain-api
而之前的配置,则写在nacos里
从中也可以知道,虽然有了nacos,但配置文件还是要有,因为nacos的地址,开发环境可能与生产环境不一样。其次,像server.port这类配置,可能要很早就开始读取,写到nacos里不合适。
3、读取nacos
1)主函数
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@NacosPropertySource(dataId = "normal", autoRefreshed = true)
public class RainApiApplication
public static void main(String[] args)
SpringApplication.run(RainApiApplication.class, args);
2)读取配置项
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.gzdd.rainapi.pojo.TokenUser;
import org.springframework.stereotype.Component;
@Component
public class AppConfig
@NacosValue(value = "$token.users:test", autoRefreshed = true)
private String users;
@NacosValue(value = "$token.passwords:test1234@gzdd", autoRefreshed = true)
private String passwords;
@NacosValue(value = "$remote.url:http://192.168.0.22:8083/gzdzzh/raindata", autoRefreshed = true)
private String remoteUrl;
public String getRemoteUrl()
return remoteUrl;
public void setRemoteUrl(String remoteUrl)
this.remoteUrl = remoteUrl;
public String[] getUsers()
return users.split(",");
public void setUsers(String users)
this.users = users;
public String[] getPasswords()
return passwords.split(",");
public void setPasswords(String passwords)
this.passwords = passwords;
4、发布
这个与nacos无关,参考上面。
三、小结
从配置文件到nacos,这是一个很大的进步。这种配置外置的思想很赞。配置文件的话,其实发布之后,修改起来不方便,比如要解开jar包、war包什么的。抛开这层不说,登录到服务器捣鼓就很麻烦。将配置外置,只需放问nacos,像一般的网站操作就好。以往也有将配置写在数据库的,虽然也比配置文件方便,但直接修改数据库却有风险。
以上是关于基于Spring Boot的程序的配置读取方案的主要内容,如果未能解决你的问题,请参考以下文章