springboot使用外部yml启动
有时候我们想更灵活的使用配置文件,例如同一套代码去部署多个客户,此时差异大的地方其实只是配置文件,这是我们希望每次启动项目从外部读取配置文件来加载项目,你可以使用一些配置中心来实现,当然也可以自己定义外部文件来实现。
import com.ctrip.framework.apollo.config; import com.ctrip.framework.apollo.configchangelistener; import com.ctrip.framework.apollo.configservice; import com.ctrip.framework.apollo.model.configchange; import com.ctrip.framework.apollo.model.configchangeevent; import lombok.extern.slf4j.slf4j; import org.springframework.beans.factory.config.yamlpropertiesfactorybean; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.boot.builder.springapplicationbuilder; import org.springframework.core.io.filesystemresource; import java.util.properties; import java.util.set; @springbootapplication @slf4j public class litchidaqapplication { private static properties properties = new properties(); public static void main(string[] args) { // springapplication.run(litchidaqapplication.class, args); try { string filepath = system.getproperty("user.dir") "/config" "/application-daq.yml"; //此处获取启动参数中的config.id来判断从哪里读取config文件 string configid = system.getproperty("config.id"); if (configid != null) { //从apollo配置中心获取配置 config config = configservice.getappconfig(); //监听apollo配置修改 config.addchangelistener(new configchangelistener() { @override public void onchange(configchangeevent changeevent) { log.info("发生改变的工作区: {}", changeevent.getnamespace()); for (string key : changeevent.changedkeys()) { configchange change = changeevent.getchange(key); log.info(string.format("检测到改变 - key: %s, oldvalue: %s, newvalue: %s, changetype: %s", change.getpropertyname(), change.getoldvalue(), change.getnewvalue(), change.getchangetype())); } } }); setkeys = config.getpropertynames(); for (string key : keys) { properties.setproperty(key, config.getproperty(key, null)); } } else { yamlpropertiesfactorybean factory = new yamlpropertiesfactorybean(); factory.setresources(new filesystemresource(filepath)); properties = factory.getobject(); } } catch (exception e) { log.error("项目初始化配置错误:", e); } new springapplicationbuilder(litchidaqapplication.class).properties(properties).run(args); } }
项目模拟外部文件读取
java -jar启spring boot项目使用外部yml
配置方式
java -jar xx.jar --spring.config.location=application.yml路径
配置单一变量
java -jar xxx.jar --xxx=test
取值
spring的@value("${xxx}")
java -jar .\ydbanew-cases-2.4.16.1.jar -tz=asia/shanghai -filterparam=2400 -appconfigserverurl=http://172.18.12.239:8081/appconfig -appconfigservercorp=2400 --server.port=64310
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。