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

Spring Boot:自定义属性、配置和测试

岳风畔
2023-03-14

我使用的是带有默认application.yml属性文件的Spring Boot2.0。我想把它拆分到不同的属性文件中,因为它变得很大。
我还想编写测试来检查属性的正确性:将在生产应用程序上下文(而不是测试上下文)上显示的值。

下面是我的属性文件:src/main/resources/config/custom.yml

my-property:
  value: 'test'
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Data
@Configuration
@ConfigurationProperties(prefix = "my-property")
@PropertySource("classpath:config/custom.yml")
public class MyProperty {

  private String value;
}
import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyProperty.class)
@EnableConfigurationProperties
public class MyPropertyTest {

  @Autowired
  private MyProperty property;

  @Test
  public void test() {
    assertEquals("test", property.getValue());
  }

}

但是测试失败并出现错误:

java.lang.AssertionError: 
Expected :test
Actual   :null

此外,通过在applicationrunner中打印应用程序,我看到在运行应用程序时,属性值为null
当我对所有属性使用application.yml时,配置相同。

如何为属性和测试设置正确的配置以使其工作?
链接到Github repo

共有1个答案

齐乐逸
2023-03-14

很好,我找到了在应用程序中拥有自定义yaml属性的正确方法。

问题是Spring不支持@propertysource这样的yaml文件(链接到issue)。这里有一个解决方法,如何处理spring文档中描述的问题。
所以,为了能够从yaml文件加载属性,您需要:
*实现EnvironmentPostProcessor
*在spring.Factory中注册它

请访问这个github回购完整的例子。

还有,非常感谢你们的支持,伙计们!

 类似资料:
  • 本机Spring Boot自动配置(例如one)也可以检测主类中声明的bean(例如注释的方法)。 如何对主类中声明的bean进行正确的bean检测? 编辑

  • 配置和自定义DevTools 更改DevTools的外观并访问隐藏的功能。 TL;DR 打开主菜单和设置菜单。 自定义DevTools的外观。 访问隐藏的功能。 打开主菜单 DevTools的主菜单是一个下拉菜单,用于配置DevTools的外观,访问附加工具,打开设置,等等。 要打开主菜单,单击DevTools窗口右上角的主菜单单按钮。 打开设置 要打开DevTools设置,当DevTools在获

  • 本文向大家介绍C#自定义属性,包括了C#自定义属性的使用技巧和注意事项,需要的朋友参考一下 示例 查找具有自定义属性的属性-MyAttribute 查找给定属性上的所有自定义属性 枚举具有自定义属性的所有类-MyAttribute 在运行时读取自定义属性的值 用法            

  • 自定义标签的意义在于方便管理,可以给SIM卡增加一个标签,并且针对某个标签进行统计、查询及管理。支持批量操作。 设置号码自定义标签 支持针对订单、针对iccid进行自定义标签的设置。 号码详情页查询/设置自定义标签 号码详情页,可以查看当前号码已设置的自定义标签,并且可以针对其添加、修改。 自定义标签管理 可以增加、修改、删除自定义属性及其值。

  • 定义一个配置 在配置文件 .sbt这章已经将了如何定义个配置,大部分配置定义在Default中 配置有三种类型,其中SettingKey和TaskKey已经在配置文件 .sbt介绍了,InputKey在任务配置的输入章节介绍。 对于配置的一些例子: val scalaVersion = settingKey[String]("The version of Scala used for buildi

  • MOSN 自定义配置说明。 本文是对 MOSN 自定义配置的说明。 Duration String 字符串,由一个十进制数字和一个时间单位后缀组成,有效的时间单位为 ns、us(或?s)、ms、s、m、h,例如 1h、3s、500ms。 metadata metadata 用于 MOSN 路由和 Cluster Host 之间的匹配。 { "filter_metadata":{ "mo