当前位置: 首页 > 知识库问答 >
问题:

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

松高爽
2023-03-14

问题:

我在软件中有3个部分:

  • 客户A服务
  • 客户B服务
  • 目标C服务

我想从A和B连接到C
我写了一个库,设置如下:

  • /src/main/java/pkg/TargetConnector。爪哇

我的客户A和B都有自己的来源和财产:

  • /src/main/java/pkg/客户端{A/B}服务。爪哇
  • /src/main/java/pkg/客户端{A/B}配置。爪哇
  • /src/main/resources/application-dev.properties
  • /src/main/resources/application-tst。房产
  • /src/main/resources/application prd。属性

连接器的属性包含服务的一些登录信息,例如。

target.url=https://....
target.usr=blablabla
target.key=mySHAkey

在TargetConfig中用于预配置连接器,例如。

@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);
}

现在,当我在客户端使用连接器jar时,我可以通过packagescan找到配置。连接器类已加载,但问题是它没有加载属性文件。

研究

我发现多个属性文件不能具有相同的名称(例如,客户端应用程序-{profile}。属性与连接器中的属性冲突),因此我尝试重命名应用程序-{profile}。targetConnector到应用程序连接器的属性-{profile}。财产
仍然没有加载的属性(这是有道理的,因为我没有连接器开发配置文件,但我的配置文件只是名为开发)。

此外,即使我尝试从连接器中显式加载一个属性文件:

@PropertySource({"classpath*:application-connector-dev.properties"}) 

它无法被找到

问题

我的问题实际上有三层:

  1. 我如何在依赖关系jar中加载属性文件?
  2. 如果属性文件的名称与application.properties?不同,我如何加载属性文件的配置版本,例如application-connector.properties
  3. 如何将问题1和问题2的答案组合在一起以加载jar中属性的配置版本?

如果需要进一步解释,请询问。

答案

我选择了公认答案中给出的方法。我刚刚为dev、tst和prd配置文件创建了3个配置文件,其中包含所需的值,并用正确的配置文件对配置文件进行了注释。

共有3个答案

柴嘉年
2023-03-14

为了使用特定的配置文件运行,可以使用选项-spring运行。个人资料。例如,active=dev

如果不使用配置文件运行,它将在应用程序中加载默认配置文件。您似乎没有的属性。

此外,建议总是有一个application.properties,并在其中放入您将在其他属性文件中重写的公共属性和默认值。

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

徐瑞
2023-03-14

我认为@PropertySource({“classpath*:application-connector-dev.properties”})这一行有一个输入错误,请删除asterik进行检查。

邓子濯
2023-03-14

您正在使用@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=profile ileA(或者你在@Profile("")注释中编写的配置文件的名称)

 类似资料:
  • Spring boot提供组件扫描来查找要扫描的包。 我正在构建一个库,里面有和。还有其他类以及不同包中的原型注释。 因此,如果有人正在使用基础包开发SpringBoot Application。他在他的应用程序中使用我的库。他需要提到来发现库的原型组件。 是否有任何方法可以在不包含库包的情况下扫描组件? 由于spring-boot-starter-驱动器仅使用依赖关系公开其endpoint,而无

  • 我有以下存储库:https://github.com/vlio20/bfit,我试图使用R2DBC以异步方式执行db操作。我遵循了以下教程(但可能已经过时了https://www.youtube.com/watch?v=DvO4zLVDkMs 以下是我的pom的相关附件: 我使用的是默认配置,所以我的属性yaml中只有以下配置: 这就是我得到的错误: 组织。springframework。豆。工厂

  • 我正在开发一个具有可重用逻辑的公共java库,以与一些AWS服务交互,这些服务将依次被多个消费者应用程序使用。出于这里概述的原因,以及Spring Boot似乎为SQS集成之类的东西提供了大量无模板代码的事实,我决定将此公共库实现为具有自动配置的定制Spring Boot启动器。 我也是Spring框架的新手,因此遇到了一个问题,即我的自动配置类的实例变量没有通过AutoWired注释进行初始化。

  • 我想在spring Boot中设置3个配置文件:production,development,test,使用外部配置文件。 应用程序类: AppConfig类:

  • 我有一个Maven多模块项目,在主pom中将一些旧版本的Spring Boot依赖项设置为父项。xml。所有子模块都从这个主pom继承Spring Boot依赖项。xml。 这很好,但是在一个新的子模块(也是多模块)中,我想使用最新的Spring引导版本,而不改变项目中正在使用的版本(以及所有依赖项)。 有没有办法巧妙地覆盖从父版本派生的Spring引导版本(及其所有依赖项),并在子模块中使用不同

  • 我很难理解WPF中的依赖属性,可能是因为我要找的用例非常具体,没有很好的文档化。 我有一个自定义控件,看起来像这样(请忽略所有可怕的代码,这是暂时的!): 我这样称呼它在我的主窗口内: 我只想在主窗口中的自定义控件调用中说: (其中fillPercent是另一个脚本中不需要担心的内容)。该控件将被展开,因此需要保持为自定义控件。我明白我可能需要依赖属性,但在尝试了许多不同的方法后,我无法弄清楚如何