问题标签 [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.
spring-boot - Springboot / Kotlin:测试注入另一个 @ConfigurationProperties 类的类的最佳实践
我在 Kotlin 有一个项目。
我创建了一个@ConfigurationProperties
类,我想知道单元测试的最佳实践。
以下是我的属性类:
我在我的控制器中注入 MyAppProperties:
我想测试我的控制器:
但我有以下 Mockito 错误:
解决此问题的最佳解决方案是什么:
- 允许 Mockito 模拟最终课程:https ://blog.mindorks.com/mockito-cannot-mock-in-kotlin
这个解决方案看起来不错,因为我们不修改现有代码,但它为整个项目和所有最终类添加了 Mockito 行为。
- 使我的属性类
open
这种解决方案需要修改代码并使类可扩展,这可能不是一件好事?
- 通过 Maven 配置打开所有 @ConfigurationProperties 类:
这个解决方案不需要修改代码,而是让所有@ConfigurationProperties 类open
,这可能不是一件好事?
- 不要模拟属性类并在 MyAppControllerTest 中对其进行初始化:
这不允许我们根据测试给出特定的行为。
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 中找到任何关于此的明确文档。
java - @Validated 注解使@ConfigurationProperties 类的字段为空
我有以下两个类和 yaml-config:
第一类:
YAML 配置:
第 2 类:
如果行中有@Validated注解 ֎ 1 ֎
然后appProps.subscriber == null in row ֎ 2 ֎. (NPE 出现)
如果行中没有@Validated注解 ֎ 1 ֎
然后appProps.subscriber != null in row ֎ 2 ֎. (按预期工作)
为什么会这样以及如何避免?
spring - Spring @ConfiurationProperties 扩展毛的问题
我正在尝试使用 Spring @Configuration 和 @ConfigurationProperties 组合从配置中加载属性。我有一个 POJO,它扩展了 HashMap<Integer, String> 并且里面有一个变量。(见MyConfigPojo
下文)。从 .yaml 文件中,我具有相同的形状。但是,在启动应用程序时,尝试将 defaultValue 的字符串解析为 Integer 时出现错误。
在配置中我有这个:
这导致
我觉得这很奇怪,所以我打开了 TRACE 日志并发现了这个:
有没有办法拦截读取这个文件或告诉 Spring 如何正确设置值?
java - 未预定义结构的属性的外部属性 @configurationProperties 样式前缀
我有一些属性,其中一些初始部分相同,其余部分对于所有属性都不同。可以有 1 个点 (.) 2,3 或更多。我不能@ConfigurationProperties
用来定位这些,prefix ="com.some.props"
因为剩余的属性不同
所以我创建了一个自定义道具类并使用了@Value
,但我必须为 wach 变量编写完整的属性路径。有没有办法可以为@Value
班级中的所有人应用前缀
spring-boot - 带有 ConfigurationProperties 的 Spring Boot CORS 配置
我有一个运行良好的全局 CORS 配置:
现在我想allowsOrigins
通过application.yaml
. 我试图添加@ConfigurationPropierties(prefix="cors")
到CorsConfiguration
类。并添加cors.allowedOrigins=test
到application.yaml
. 但这无济于事。我已经阅读了很多帖子和教程,但我不明白为什么这不起作用。应该就这么简单。我错过了什么?
编辑我也尝试过@Value
这样的注释
应用程序.yaml
结果是我只得到默认值*
,没有读取任何内容application.yaml
。
谢谢
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。
spring-boot - 使用 Spring Boot 在运行时加载 Yml
我在不同的文件夹中有多个 yml 文件。文件夹中的所有文件共享我使用 java bean 映射的相同属性结构。
在运行时,通过工厂,我想用运行时选择的特定文件的值填充正确的 bean。我怎么做?
谢谢
java - 为什么@ConfigurationProperties 需要getter?
我在 SpringBoot 中意识到了一个奇怪的行为。
在 yml 文件中,我有以下配置:
这些是它的类:
如您所见,主类具有@ConfigurationProperties注释以将 yml 中的属性加载到该 bean 中。
这是我发现的:
- 如果我不为主类中的字段提供吸气剂,那么有时主调用中的字段保持为空,因此不会启动
- 如果我重新启动 SpringBoot,则随机其他(1 个或多个)字段保持为空,因此未启动
- 如果我重新启动 SpringBoot n 次,那么,随机字段一次又一次地保持为空
- 如果我为主类中的字段提供 getter ,那么无论我重新启动 SpringBoot 多少次,所有字段都将始终从 tye yml 文件中实例化
为什么是这样?为什么 SpringBoot 需要在 yml 中表示属性的字段的 getter?
java - @ConfigurationProperties 在 Spring Boot 2.4.2 中的测试中不起作用
我有一个在 Spring Boot 2.3.8 中运行良好的应用程序,但@RestClientTest
s 在 2.4.2 中失败,因为无法实例化测试对象,因为没有 bean @ConfigurationProperties
(由@TestConfiguration
.
我如何更改我的代码以使其适用于 2.4.x?
代码是:
这在 2.3.8 中有效,但在 2.4.2 中失败