私有化部署服务时配置文件如何实现动态

241 天前
 a1oyss0925

客户要求服务部署到本地服务器上,服务是根据业务做了多模块。 原本的方案每多一个本地部署的需求,就在每个模块的 resources 下加一个文件夹,打包的时候通过选择 profiles 只打包那个文件夹下的配置,但是因为模块有点多,所以每次新增一堆东西很麻烦。

现在像减少重复的工作,试图把每个模块的 profiles 移除掉,统一使用父 pom 中的 profiles ,在里面配置变量,因为项目只用了 mysql ,redis ,所以配置项也不多,配置如下:

# applicaiton.yml
spring:
  profiles:
    active: @profiles.active@

server:
  port: 8010
# application-prod.yml
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    dynamic:
      primary: master
      datasource:
        master:
          url: @mysql.master.url@
          username: @mysql.master.username@
          password: @mysql.master.password@
        slave:
          url: @mysql.slave.url@
          username: @mysql.slave.username@
          password: @mysql.slave.password@
  redis:
    host: @redis.host@
    sentinel:
      master: @redis.sentinel.master@
      nodes: @redis.sentinel.nodes@
    password: @redis.password@
    timeout: 10s

但是尝试了下打包,发现并不能正确写入变量,请问还有什么好的解决方案吗。(配置中心怕是不行,领导估计是不让用)

1216 次点击
所在节点    程序员
7 条回复
ChoateYao
241 天前
使用 spring.profiles.group 实现,其他配置文件只要放在一个文件夹里面就行了
kennfalcon
241 天前
maven 里打包是不是没有配置变量替换信息
jinjiang2024
240 天前
host 和 url 使用别名映射,其他用户名和密码统一 不就可以实现了
jinjiang2024
240 天前
类似这种
# redis 配置
redis:
# 地址
host: redisTest
# 端口,默认为 6379
port: 6379
# 密码
password: 123456
# 连接超时时间
timeout: 10s
a1oyss0925
240 天前
@kennfalcon 配置了,应该是子模块里没写的原因
lwq84510
240 天前
使用环境变量 export SERVER_PORT=10086, 配置文件加载环境变量 server.port=${SERVER_PORT:8848}
babhbsbx
240 天前
今天搭新项目,遇到的问题,我的解决办法如下
在 build 标签下添加如下内容

<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1028773

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX