网站开发设计有限公司,如何侵入网站服务器,微信开放平台官方网站,微信推广平台哪家好文章目录 1、临时属性2、IDEA中的临时属性3、配置文件4级分类4、关于四级分类的思考5、自定义配置文件6、多环境开发#xff08;yaml版#xff09;7、配置文件按环境分类8、include与group再细粒度9、一点思考10、多环境开发兼容问题 1、临时属性
jar包或者镜像已经打完了yaml版7、配置文件按环境分类8、include与group再细粒度9、一点思考10、多环境开发兼容问题 1、临时属性
jar包或者镜像已经打完了想修改下服务的配置如何实现 ⇒ 临时属性 如修改服务的端口
java –jar springboot.jar --server.port80携带多个属性启动SpringBoot属性间使用空格分隔
java –jar springboot.jar --server.port80 --spring.datasource.druid.password admin123以上能生效的原因是因为命令行的参数优先级高于配置文件配置文件中的配置被覆盖关于优先级可查看这里 总结即
临时属性添加方式java –jar 工程名.jar –-属性名值临时属性必须是当前boot工程中有的属性否则设置无效不会报错
2、IDEA中的临时属性 而在IDEA中想加临时属性可以编辑配置修改Environment.Program.arguments 上面的这个参数会被读取到程序启动的main方法参数args中 因此也可以在这里以代码的形式加入相关参数。
public static void main(String[] args) {String[] arg new String[1];arg[0] --server.port8080;SpringApplication.run(SSMPApplication.class, arg); }但为了安全性一般在启动boot程序时断开读取外部临时配置对应的入口也就是run方法不传args参数。
public static void main(String[] args) {SpringApplication.run(SSMPApplication.class); //不传args}
3、配置文件4级分类
对于开发自己调试的配置和上线后的配置参数值不同特别的对于一些涉密系统如银行系统数据库信息在开发阶段更不可能拿到另外总不能每次启动都像上面加参数用临时属性来覆盖再者数据库信息总不能被丢到外面的参数里吧因此出现配置文件的4级分类给不同阶段的人使用。 1级 file config/application.yml 【最高】2级 file application.yml3级classpathconfig/application.yml4级classpathapplication.yml 【最低】 其中
1级与2级留做系统打包后设置通用属性1级常用于运维经理进行线上整体项目部署方案调控3级与4级用于系统开发阶段设置通用属性3级常用于项目经理进行整体项目属性调控
关于各级的位置 而工程路径file即和jar包或者模块目录同级的目录 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序即不同的取并集相同的按优先级来覆盖。
4、关于四级分类的思考
既然工程路径file是和jar包或者模块目录同级的目录那我在项目project目录下建个application.yml文件岂不是成了所有模块的公共配置了 这一点以后应该用得到
5、自定义配置文件
除了以上配置也可以自定义配置文件properties与yml文件格式均支持如 然后通过启动参数加载配置文件无需书写配置文件扩展名) 也可通过配置文件位置–spring.config.location来生效 有多个配置文件时逗号隔开就好。 6、多环境开发yaml版
实际开发中生产、测试、开发三个环境配置各不相同因此要进行多环境的配置开发 yml文件写法使用三个横线来分割文件 含义解释 spring.profiles是过时写法可改可不改 7、配置文件按环境分类
按上面所有环境的配置写在一起拿分隔符分开显然不合理继续做改善 即
主配置文件中设置公共配置全局以及active决定来启用哪一个配置环境分类配置文件中常用于设置冲突属性也就是自己独有的属性局部 若使用properties文件来进行多环境启动则需要多文件注意文件命名 8、include与group再细粒度 include 根据功能对配置文件中的信息进行拆分并制作成独立的配置文件如
application-devDB.ymlapplication-devRedis.ymlapplication-devMVC.yml
此时写主配置文件就使用include属性在激活指定环境的情况下同时对多个环境进行加载使其生效多个环境间使用逗号分隔
spring:profiles:active: devinclude: devDB,devRedis,devMVC此时加载了四个文件即application-dev.yml带下面的这三个当这四个文件有属性设置冲突时以后面的为准最后加载的环境属性生效。 group 上面的include的写法有个不好的体验我从dev切到test那除了active字段外include字段的所有值都给改一遍繁琐因此从Spring2.4版开始使用group属性替代include属性降低了配置书写量
spring:profiles:active: devgroup:dev: devDB,devRedis,devMVCpro: proDB,proRedis,proMVCtest: testDB,testRedis,testMVC
此时切环境就只改active字段就好。
9、一点思考
写到这儿想起之前有个需求要在配置里适配Redis的三种模式的连接即单机、集群、哨兵。当时想着在一个yaml中去实现但yaml是文本语言没法if判断因此以为不能实现现在引入include就可以实现一个服务同时适配三种Redis的连接模式。
首先定义好三种模式的配置文件 在主配置中include一个文件名带变量的动态文件变量值由一个环境变量控制且给个默认值。目前项目使用k8s部署那就在deploy中加一个环境变量。改这个环境变量就实现了切换redis模式。 当然SpringBoot还有
spring:config:import:# 导入classpath下default目录下的default.properties配置文件- classpath:/default/default.propertiesnacos还有shared-configs
spring:cloud:nacos:config:server-addr: localhost:8848file-extension: ymlshared-configs:- application-dev.ymlnamespace: dev以及官网的其他引入配置的方式都是实现思路。
10、多环境开发兼容问题
当maven的pom文件中也配置了多环境开发且与SpringBoot冲突如一个默认测试一个默认开发此时以Maven为主 实现兼容Maven中设置了多环境属性activeByDefault属性为true即默认使用这个 SpringBoot配置文件中引用Maven属性key 执行Maven打包指令package并在生成的boot打包文件.jar文件中查看对应信息看到引用成功。 Tip1有的引用Maven属性仍然用dollar大括号 此时直接打包Maven指令执行结束后生成jar包但类参与了编译而配置文件没有参与编译而是复制到包中${}未被解析
此时需要加插件对资源文件开启对默认占位符的解析
Tip2改完activeByDefault后即使maven cleanactive的文件也不对基于SpringBoot读取Maven配置属性的前提下如果在Idea下测试工程时pom.xml每次更新后需要手动执行compile编译方可生效