为了账号安全,请及时绑定邮箱和手机立即绑定

弹簧启动属性,具有来自依赖项的配置文件

弹簧启动属性,具有来自依赖项的配置文件

素胚勾勒不出你 2022-09-22 10:26:25
问题:我在软件中有3个部分:客户端 A 服务客户端 B 服务目标 C 服务我想从A和B连接到C,我写了一个具有以下设置的库:/src/main/java/pkg.../目标连接器.java/src/main/java/pkg.../目标配置.java/src/main/resources/应用程序开发属性/src/main/resources/application-tst.properties/src/main/resources/application-prd.properties我的客户 A 和 B 都有自己的来源和属性:/src/main/java/pkg.../Client{A/B}Service.java/src/main/java/pkg.../Client{A/B}Config.java/src/main/resources/应用程序开发属性/src/main/resources/application-tst.properties/src/main/resources/application-prd.properties连接器的属性包含服务的一些登录信息,例如target.url=https://....target.usr=blablablatarget.key=mySHAkey在目标配置中用于预配置连接器,例如@Value("target.url")String url;@Value("target.usr")String usr;@Value("target.key")String key;@Beanpublic TargetConnector connector() {  return new TargetConnector(url, usr, key);}现在,当我在客户端中使用连接器 jar 时,我可以通过软件包扫描找到配置。连接器类已加载,但问题是它不加载属性文件。研究我发现多个属性文件不能具有相同的名称(例如,客户端应用程序-{profile}.属性与来自连接器的应用程序冲突),因此我尝试将目标连接器的应用程序-{profile}.属性重命名为应用程序连接器-{profile}.属性。仍然没有加载的属性(这是有道理的,因为我没有例如连接器开发配置文件,但我的配置文件只是命名为dev)。此外,即使我尝试使用以下命令从连接器显式加载其中一个属性文件:@PropertySource({"classpath*:application-connector-dev.properties"}) 找不到问题我的问题实际上是3分层的:如何在依赖项 jar 中加载属性文件?如果属性文件的名称与 application.properties 的名称不同,如何加载属性文件的分析版本?例如,应用程序连接器属性如何组合问题 1 和 2 中的答案,将属性的分析版本加载到 jar 中?如果需要进一步解释,请询问。答我选择了接受的答案中给出的方法。我刚刚为包含所需值的 dev,tst,prd 配置文件创建了 3 个配置,并使用正确的配置文件注释了配置文件。
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

您正在使用@Configuration带注释的类。也许您可以为每个配置文件提供一个。下面是一个示例:


@Configuration

@Profile("profileA")

@PropertySource({"classpath:application-profileA.properties"})

public class ConfigurationProfileA{

 @Value("${target.url}")

 String url;

 @Value("${target.usr}")

 String usr;

 @Value("${target.key}")

 String key;


 @Bean

 public TargetConnector connector() {

   return new TargetConnector(url, usr, key);

 }

}

对配置文件B执行相同的操作(也许您可以更好地构建它,但这里的关键点是注释@Profile(“”)和@PropertySource(“”))


一旦你有了配置类,Spring将使用你想要的配置类,只需填写 -spring.profiles.active=profileA(或你在@Profile(“)注释中编写的配置文件的名称)


查看完整回答
反对 回复 2022-09-22
?
侃侃无极

TA贡献2051条经验 获得超10个赞

我认为这行中有一个拼写错误@PropertySource({“类路径*:应用程序连接器-dev.properties”})请通过删除星号进行检查。


查看完整回答
反对 回复 2022-09-22
?
大话西游666

TA贡献1817条经验 获得超14个赞

为了使用特定配置文件运行,您可以使用例如选项运行-spring.profiles.active=dev

如果您不使用配置文件运行,它将加载您似乎没有的默认配置文件。application.properties

此外,建议始终具有应用程序.properties,并在其中放入公共属性和将在其他属性文件中重写的默认值。

另一个错误是如何分配带有注释的属性,您需要使用@Value@Value("${PROPERTY_FROM_PROPERTIES_FILE}")


查看完整回答
反对 回复 2022-09-22
  • 3 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信