问题标签 [configurationproperties]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
249 浏览

spring-boot - Springboot / Kotlin:测试注入另一个 @ConfigurationProperties 类的类的最佳实践

我在 Kotlin 有一个项目。

我创建了一个@ConfigurationProperties类,我想知道单元测试的最佳实践。

以下是我的属性类:

我在我的控制器中注入 MyAppProperties:

我想测试我的控制器:

但我有以下 Mockito 错误:

解决此问题的最佳解决方案是什么:

这个解决方案看起来不错,因为我们不修改现有代码,但它为整个项目和所有最终类添加了 Mockito 行为。

  • 使我的属性类open

这种解决方案需要修改代码并使类可扩展,这可能不是一件好事?

  • 通过 Maven 配置打开所有 @ConfigurationProperties 类:

这个解决方案不需要修改代码,而是让所有@ConfigurationProperties 类open,这可能不是一件好事?

  • 不要模拟属性类并在 MyAppControllerTest 中对其进行初始化:

这不允许我们根据测试给出特定的行为。

0 投票
0 回答
307 浏览

java - 使用 @RefreshScope 刷新配置属性的线程安全

我有一个 bean 注释,@ConfigurationProperties其中我有应用程序绑定所需的属性。我还对类进行了注释,@RefreshScope因此我可以刷新在运行时更改的任何配置属性。

基本版本如下所示:

getName()方法将不断被不同的线程调用。

我从 Spring 中查看了此文档:https ://cloud.spring.io/spring-cloud-static/Greenwich.SR2/single/spring-cloud.html#refresh-scope

“刷新作用域 bean 是在使用时(即调用方法时)初始化的惰性代理,作用域充当初始化值的缓存。要强制 bean 在下一次方法调用时重新初始化,您必须使其缓存条目无效。

RefreshScope 是上下文中的一个 bean,并且有一个公共的 refreshAll() 方法通过清除目标缓存来刷新范围内的所有 bean。/refresh 端点公开了这个功能(通过 HTTP 或 JMX)。要按名称刷新单个 bean,还有一个 refresh(String) 方法。”

我从上述文档中的理解是,在调用刷新时(通过执行器 /actuator/refresh 或其他方式),bean 被重新创建并再次初始化。

我的问题是:整个进程线程安全吗?请注意确保在此 bean 刷新过程中,尝试访问上述类中的 name 属性的线程之间不会出现任何竞争条件。我没有从 Spring 中找到任何关于此的明确文档。

0 投票
1 回答
146 浏览

java - @Validated 注解使@ConfigurationProperties 类的字段为空

我有以下两个类和 yaml-config:

第一类:

YAML 配置:

第 2 类:

如果行中有@Validated注解 ֎ 1 ֎

然后appProps.subscriber == null in row ֎ 2 ֎. (NPE 出现)

如果行中没有@Validated注解 ֎ 1 ֎

然后appProps.subscriber != null in row ֎ 2 ֎. (按预期工作)

为什么会这样以及如何避免?

0 投票
1 回答
87 浏览

spring - Spring @ConfiurationProperties 扩展毛的问题

我正在尝试使用 Spring @Configuration 和 @ConfigurationProperties 组合从配置中加载属性。我有一个 POJO,它扩展了 HashMap<Integer, String> 并且里面有一个变量。(见MyConfigPojo下文)。从 .yaml 文件中,我具有相同的形状。但是,在启动应用程序时,尝试将 defaultValue 的字符串解析为 Integer 时出现错误。

在配置中我有这个:

这导致

我觉得这很奇怪,所以我打开了 TRACE 日志并发现了这个:

有没有办法拦截读取这个文件或告诉 Spring 如何正确设置值?

0 投票
0 回答
35 浏览

java - 未预定义结构的属性的外部属性 @configurationProperties 样式前缀

我有一些属性,其中一些初始部分相同,其余部分对于所有属性都不同。可以有 1 个点 (.) 2,3 或更多。我不能@ConfigurationProperties用来定位这些,prefix ="com.some.props"因为剩余的属性不同

所以我创建了一个自定义道具类并使用了@Value,但我必须为 wach 变量编写完整的属性路径。有没有办法可以为@Value班级中的所有人应用前缀

0 投票
2 回答
172 浏览

spring-boot - 带有 ConfigurationProperties 的 Spring Boot CORS 配置

我有一个运行良好的全局 CORS 配置:

现在我想allowsOrigins通过application.yaml. 我试图添加@ConfigurationPropierties(prefix="cors")CorsConfiguration类。并添加cors.allowedOrigins=testapplication.yaml. 但这无济于事。我已经阅读了很多帖子和教程,但我不明白为什么这不起作用。应该就这么简单。我错过了什么?

编辑我也尝试过@Value这样的注释

应用程序.yaml

结果是我只得到默认值*,没有读取任何内容application.yaml

谢谢

0 投票
0 回答
40 浏览

spring-boot - 如何说服 Spring Boot 在我的配置类中考虑来自 application.properties 的值?

我在 Kotlin 中实现了一个配置类来读取值,application.properties以便在 Spring Boot 2.2.2-RELEASE 应用程序中具有可配置的值。

在我的 application.properties 中,我有:

我已经尝试用注释主类

正如 Baeldung 所建议的那样:Spring Boot 中的 @ConfigurationProperties 指南

问题是 application.properties 中的值15未被读取,而是使用默认值10L

0 投票
2 回答
324 浏览

spring-boot - 使用 Spring Boot 在运行时加载 Yml

我在不同的文件夹中有多个 yml 文件。文件夹中的所有文件共享我使用 java bean 映射的相同属性结构。

在运行时,通过工厂,我想用运行时选择的特定文件的值填充正确的 bean。我怎么做?

谢谢

0 投票
1 回答
648 浏览

java - 为什么@ConfigurationProperties 需要getter?

我在 SpringBoot 中意识到了一个奇怪的行为。

在 yml 文件中,我有以下配置:

这些是它的类:

如您所见,主类具有@ConfigurationProperties注释以将 yml 中的属性加载到该 bean 中。

这是我发现的:

  1. 如果我为主类中的字段提供吸气剂,那么有时主调用中的字段保持为空,因此不会启动
  2. 如果我重新启动 SpringBoot,则随机其他(1 个或多个)字段保持为空,因此未启动
  3. 如果我重新启动 SpringBoot n 次,那么,随机字段一次又一次地保持为空
  4. 如果我为主类中的字段提供 getter ,那么无论我重新启动 SpringBoot 多少次,所有字段都将始终从 tye yml 文件中实例化

为什么是这样?为什么 SpringBoot 需要在 yml 中表示属性的字段的 getter?

0 投票
1 回答
659 浏览

java - @ConfigurationProperties 在 Spring Boot 2.4.2 中的测试中不起作用

我有一个在 Spring Boot 2.3.8 中运行良好的应用程序,但@RestClientTests 在 2.4.2 中失败,因为无法实例化测试对象,因为没有 bean @ConfigurationProperties(由@TestConfiguration.

我如何更改我的代码以使其适用于 2.4.x?

代码是:

这在 2.3.8 中有效,但在 2.4.2 中失败