Closed TeddyLav closed 9 months ago
你是想不需要发布就可以更改配置文件并且生效吗? 一般如果多环境,是可以使用 springboot application.properties 的 profile 能力的
比如打包发布了一个版本包,然后给多个项目用,但不同项目的参数不一样,希望用同一个包,只是不同项目jar包外面的配置文件不一样即可。
你们现在是怎么配置的呢?
目前的最终运行目录格式如下:
.
├── master-ark-biz.jar (配置文件直接打到jar里面)
├── provider-ark-biz.jar (配置文件直接打到jar里面)
└── conf
--- └── ark
------ └── bootstrap.properties
我的目的是想master和provider的jar包中的配置文件可以放到外面,方便修改。
启动方式: 1、java -jar -Dsofa.ark.embed.enable=true master-ark-biz.jar 2、通过Telnet命令,部署provider包
你们普通应用这些 application.properties 是怎么维护的呢?一般是建议都放在代码仓库里的。
对于普通应用,放在 config/${app}/application.properties
这里,然后通过 maven 打包插件 maven-resources-plugin
把对应 app 的 application.properties 拷贝到运行时的 config 目录下,如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>../../target</outputDirectory>
<resources>
<resource>
<directory>../../conf</directory>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-configs</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>../../target/config</outputDirectory>
<resources>
<resource>
---------> 这里 <directory>./src/main/resources/config/${app}</directory>
<includes>
<include>*.properties</include>
<include>*.yaml</include>
<include>*.yml</include>
</includes>
</resource>
<resource>
<directory>./src/main/resources/config</directory>
<includes>
<include>*.properties</include>
<include>*.yaml</include>
<include>*.yml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
当前模块还不具备,同一个代码仓库里像基座一样配置多应用的能力,这个我们可以支持下这个能力。 https://github.com/koupleless/koupleless/issues/38
前模块还不具备,同一个代码仓库里像基座一样配置多应用的能力,这个我们可以支持下这个能力 ---你们普通应用这些 application.properties 是怎么维护的呢?一般是建议都放在代码仓库里的。 同一套程序可能给10个不同的项目使用,每个项目的参数key是一样的,但是value可能不一样,所以只想发一个版本(jar包),各个项目把jar包拿到现场后,根据实际情况修改外面文件夹里面的配置value即可。
你看下我上面推荐的基座多应用配置方式,适合你们吗?在蚂蚁内部是这么玩的,比较方便管理
基座的配置方式不管怎样,模块的application.properties 是不考虑放在 jar 包之外。模块支持同代码多应用配置能力后,也是放在 resources/config/${app}/application-dev.properties
https://www.sofastack.tech/projects/sofa-boot/sofa-ark-readme/architecture.png 先看下语言是否一致,如上图所示: 基座=Master App Biz 模块=Dynamic Biz
然后我在conf文件夹加了基座的配置,运行程序没生效,好像根本不会读取 application.properties这个文件。 . ├── master-ark-biz.jar (配置文件直接打到jar里面) ├── provider-ark-biz.jar (配置文件直接打到jar里面) └── conf --- └── ark ------ └── bootstrap.properties --- └── master ------ └── application.properties
conf/ark/bootstrap.properties 是 SOFAArk 容器的默认启动配置文件,不是单个模块的启动配置文件。 conf/master/*** 也不是基座的启动配置文件。
单个模块的启动配置文件需要放在模块自己的 resources/config/${app}/application*.properties 内。
我的目的是想master和provider的jar包中的配置文件可以放到外面,方便修改。
一般来说,配置文件是放在 jar 包中的。对于普通应用,为了让不同生产环境使用不同的 application.properties配置文件,应用的jar包中会有不同的 application.properties配置文件。在启动时会根据当前的环境,通过 jvm 参数指定当前使用的配置文件(该配置文件也在 jar 包内),所以 “jar包中的配置文件一般不会放在外面”。
同一套程序可能给10个不同的项目使用,每个项目的参数key是一样的,但是value可能不一样。
实现方式可以有很多中,但一个应用的 application.properties 不应该在 jar 包外。你可以考虑把10个项目的配置都放在同一个 jar 中,通过 jvm 参数指定当前使用的配置文件。或者你在项目中动态读取特定位置的文件,自行解析文件中的 key-value,配置在项目里
OK。多谢!
方便的化加下开发者协作群细聊吗?或者我个人微信 zzl_ing “Serverless 社区交流与协作群”群的钉钉群号: 24970018417
打包后的Ark Biz配置文件在jar包中,如果生产环境需要修改参数,只能在开发环境修改再打包,是否有把配置文件放到jar包外生效的方法? master和biz包都有application.properties配置文件,也没法放到conf/ark这个目录下吧?