springboot项目加载多个配置文件,配置文件属性基本相同,文件数量是变化的,怎样绑定实体类?

我的springboot项目有一个需求:

  1. 创建自定义配置文件并设置属性和值
  2. 自定义配置文件数量会根据生成环境增减,但文件中的属性不变,只是值不一样
    网上许多加载配置文件并绑定实体类的案例,都是需要@PropertySource指定具体的配置文件。但是我的项目需要在打包后部署到生产环境,配置文件数量是变化的,应该怎样根据配置文件数量动态生成不同的实体类?

没处理过这种情况,你也许可以说一下应用场景。也许有其他更好的办法呢。

说下具体的应用场景吧。没做过这种需求

我的场景是:请求http接口,获取返回的xml数据,解析xml生成一定格式的数据保存到本地。每个自定义的配置文件中,都有请求参数(用户名、token等,参数类型都一样,但值不一样)、处理xml的规则(不同的接口返回的xml格式是一样的,只是有些节点的值需要特数处理)。我想让程序同时加载多个自定义配置文件,把自定义文件中的属性绑定到实体类,这样就可以使用多线程同时请求多个接口。

如果我对你的问题没有理解错误的话,我是这样想的:
我觉得没必要用配置文件的形式,你直接在本地定义一个目录,把所有的xml文件都放在这个目录中。客户端请求的时候,根据参数再从这个目录中读取xml文件响应给客户端。对于服务器来说,都是读操作。不存在什么并发问题,客户端是可以并发请求的。

配置文件一般用于配置,但是我觉得你的应用好像是使用xml作为数据源了。

不是这样的。我这里是请求端,要请求多个接口地址,每个接口都对应不同的项目,接口规则一样,只是请求接口时需要有用户名、token、项目id等参数,为了方便管理,所以把这些参数和其他每个项目特殊的规则写到了不同的配置文件中application-xxx.yml。

那这样也没有必要用多个配置文件呀。一个配置文件 ,可以使用数组 + 对象的配置 方式来描述比较复杂的配置对象。

类似于:

arr:
  - {account: "admn", passs: "123456", meta: {"foo": "bar"}}
  - {account: "admn", passs: "123456", meta: {"foo": "bar"}}

只要@ConfigurationProperties对象设置得当,是可以正确注入属性的。

放到一个配置文件中是可以的,只是会使文件显得臃肿,因为每个接口对应的参数、规则(主要是解析xml的规则,xml的某个节点需要配置词典进行转换,就需要把词典对应关系都配置上,可能有几十个)等配置有很多。所以想分开,看看有没有这种需求的解决方案。

这种比较复杂的东西,我觉得可以考虑不用配置文件了。而是用mysqlredis之类的数据源存储起来。这样也好在后台可以随时修改。

好吧,多谢了!我再看看有么有其他方案。

1 个赞