gpt4 book ai didi

java - 自定义 Spring boot 启动器中是否可以有默认的 application.yml ?

转载 作者:太空宇宙 更新时间:2023-11-04 09:15:26 24 4
gpt4 key购买 nike

我的自定义 Spring Boot 启动器和用作依赖项的 Spring Boot 应用程序使用者面临问题。我在两个 application.yml 中都有,但似乎我正在寻找的配置只有在消费者中定义时才存在。

我在启动器中的配置是这样的:

@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "security")
public class StarterSecurityConfig {
private boolean jwtEnabled;
private String[] unsecuredPaths;
private String[] securedPaths;
}

我在 AutoConfiguration 类中定义了这个 bean:

@Bean
public StarterSecurityConfig starterSecurityConfig() {
return new StarterSecurityConfig();
}

拥有这个 application.yml 和另一个变量的消费者可以完美地检索它:

    security:
jwt-enabled: true
secured-paths:
- /user/**
unsecured-paths:
- /**

但是,如果我从消费者中删除它并将其放入启动器的 application.yml 中,则启动器 bean 在创建它们时不具有这些属性。

也许我错过了什么?

最佳答案

如果我正确理解你的问题,我上周就遇到了这样的问题......我正在检查这个问题,我有一些发现(官方文档不支持它们):如果您添加依赖项并想要使用其资源,那么您会遇到两个 application.yml 文件具有相同位置的情况 - classpath:application.yml ,或者它们不能一起加载,或者其中一个被另一个覆盖。无论如何,在我的应用程序中,它不起作用。

如果您只需要从依赖的配置文件加载配置,则直接而简单的解决方案 - 重命名它并以可能的方式加载(从 YAML 手动加载、属性源的初始化程序等)

但是如果这个配置文件应该在任何地方使用,我们可以在上下文中手动加载属性。在依赖项(在您的情况下是消费者)中创建另一个配置文件,例如Consumer-application.yml 和 @configuration 类中的下一个 bean:

@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
var propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
var yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
yamlPropertiesFactoryBean.setResources(new ClassPathResource("consumer-application.yaml"));
propertySourcesPlaceholderConfigurer.setProperties(yamlPropertiesFactoryBean.getObject());
return propertySourcesPlaceholderConfigurer;
}

您可以在两个应用程序中使用 @Value 来使用 YAML 文件中的属性。

但最简单的方法 - 使用属性配置。在这种情况下,您可以设置 @PropertySource("classpath:consumer-application.properties")在消费者和@PropertySource(value = {"classpath:application.properties", "classpath:consumer-application.properties"})就我而言,两种变体都可以正常工作。

关于java - 自定义 Spring boot 启动器中是否可以有默认的 application.yml ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59092672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com