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

Spring Boot-如何从多个自定义yml读取属性

权韬
2023-03-14

我们正在从1.3.0升级Spring引导版本。发布到2.3.12。释放。根据旧版本,yml文件使用以下代码片段读取

@Configuration
@ConfigurationProperties(locations = "classpath:/config/myconf-source.yml")
public class MyConfigProperties {

    private String configSource;

    public String getConfigSource() {
        return configSource;
    }

    public void setConfigSource(String configSource) {
        this.configSource = configSource;
    }
}

在src/main/Resources/config/中配置文件

myconf-source.yml
news-source.yml
conf-mapping.yml

myconf源中的内容。yml

configSource: "TEST"

相应的测试类

@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@EnableAutoConfiguration
@SpringApplicationConfiguration(classes = SampleApplication.class)
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@ConfigurationProperties(locations = "classpath:**/config/**")
public class MyConfigPropertiesTest {

    @Autowired
    private MyConfigProperties myConfigProperties;

    @Test
    public void testMyConfigProperties() {
        String config = myConfigProperties.getConfigSource();
        Assert.assertEquals(config, "TEST");
    }
}

更改到新版本后,它会抛出一个错误无法解析方法“位置”

如果我删除locations属性,spring将如何知道类MyConfigProperties必须读取MyConfigSource。yml

另外,在运行测试类时,NullPointerException作为myConfigProperty抛出。getConfigSource() 变为空。

我尝试过各种解决方案,但没有成功,

有人能建议如何使它工作吗?

谢谢


共有2个答案

子车煌
2023-03-14

您可以使用@PropertySource annotation读取yml文件,您可以阅读以下文章:

https://www.baeldung.com/properties-with-spring

富波光
2023-03-14
匿名用户

如果在该类中使用@Bean定义Bean,则应使用@Configuration

如果没有,那么从那里删除它。

此外,@Configuration不会使这个类成为您要求它在测试中自动生成的bean。如果您希望MyConfigProperties可用于自动连接,那么您还需要@EnableConfigurationProperties(MyConfigProperties.class)。这将确保这个类在应用程序上下文中作为Springbean可用。

是的

@PropertySource("classpath:/config/myconf-source.yml")
@ConfigurationProperties()
@EnableConfigurationProperties(MyConfigProperties.class)
public class MyConfigProperties {

    private String configSource;

    public String getConfigSource() {
        return configSource;
    }

    public void setConfigSource(String configSource) {
        this.configSource = configSource;
    }
}

 类似资料:
  • 问题内容: 我可以创建自定义属性并将其应用到normal ,如下所示: 我的问题:是否可以在不创建扩展类的情况下读取这些自定义属性的值?我的意思是,我想从我的中读取自定义属性,但是到目前为止,我所看到的示例要求我从自定义视图的构造函数中读取值 问题答案: 我的问题:是否可以在不创建扩展EditText的类的情况下读取那些自定义属性的值? 是的,您无需扩展类即可获取这些属性。为此,你可以使用一个特殊

  • 但是,我只能访问有关用户的基本信息,例如GivenName和Surname。我在Azure门户中创建了名为“extension_e3f9d0....”的扩展属性。 问题是,我不知道如何访问属性,一旦用户登录。当我调用Postman中的API时,可以检索这些自定义属性,如下所示: https://graph.microsoft.com/v1.0/users/[user@whatever]?$sele

  • 我使用swagger生成类在Java和类型脚本。我有问题定义映射属性与对象列表为值。我试图定义如下: 上面的yml定义在java中生成以下代码: 如何配置yml以生成包含数据列表的密钥?类似于下面的类: 或 这是否可能与大摇大摆2.0?我正在考虑定义另一个扩展ArrayList的DataList类,然后将该类用作映射的值。 --------------更新 谢谢@nickb 我使用swagger-

  • 在我的Android Studio项目中,我在gradle中定义了代理设置。与Git repo同步的属性文件。只要在那里定义了代理密码,我就需要将其移动到本地。属性文件。我想实现这样的smth: 在gradle.properties: 在当地。特性: 我该怎么做?

  • 我正在使用Keycloak SAML,SpringBoot (Java ),并且我得到了一个包含用户所在组的响应,所以我在SAML响应中有这个属性: 属性名是member,他有2个值“/other_TEST_GROUP”和“TEST_ GROUP”,但在我的代码中,当我尝试获得这样的“member”值时(): 它只得到第一个值,在这种情况下是“/ANOTHER_TEST_GROUP”,我希望得到值

  • 文本文件中有两个值,如下所示: 我想将这两个值保存为两个自定义属性,以便我可以在肥皂请求中使用它。 这是我到目前为止所拥有的,但没有运气: 我收到以下错误: