如何在 SpringBootTest 中将@LocalPort 与@DynamicPropertySource 一起使用?
How to use @LocalPort together with @DynamicPropertySource in a SpringBootTest?
我们有以下配置
应用-local.yaml
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://localhost:8080/jwks
应用-production.yaml
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: https://auth.foo.com/.well-known/jwks.json
当 运行 在本地主机上时,我们有一个控制器可以模拟 OAuth2 端点并返回自签名令牌。
使用静态端口时一切正常。
我们在使用 WebEnvironment.RANDOM_PORT
时努力用 SpringBootTest 中的动态端口覆盖 属性 jwt-set-uri
根据文档 @DynmicPropertSource
应该是最合适的
但必须是静态的(意味着 Kotlin 中伴随对象的一部分)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class Test {
@LocalServerPort
private var port = 0
companion object {
@DynamicPropertySource
fun registerUrl(registry: DynamicPropertyRegistry) {
registry.add("spring.security.oauth2.resourceserver.jwt.jwk-set-uri", "???")
}
}
}
我的问题:
我可能在这里遗漏了一些东西,但是如何在 @DynamicPropertySource 的静态上下文中访问非静态端口?
由于 @LocalServerPort
是 属性,您可以使用 @JvmStatic
对其进行注释。然后您就可以在 @DynamicPropertySource
中使用它
我们有以下配置
应用-local.yaml
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://localhost:8080/jwks
应用-production.yaml
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: https://auth.foo.com/.well-known/jwks.json
当 运行 在本地主机上时,我们有一个控制器可以模拟 OAuth2 端点并返回自签名令牌。
使用静态端口时一切正常。
我们在使用 WebEnvironment.RANDOM_PORT
jwt-set-uri
根据文档 @DynmicPropertSource
应该是最合适的
但必须是静态的(意味着 Kotlin 中伴随对象的一部分)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class Test {
@LocalServerPort
private var port = 0
companion object {
@DynamicPropertySource
fun registerUrl(registry: DynamicPropertyRegistry) {
registry.add("spring.security.oauth2.resourceserver.jwt.jwk-set-uri", "???")
}
}
}
我的问题: 我可能在这里遗漏了一些东西,但是如何在 @DynamicPropertySource 的静态上下文中访问非静态端口?
由于 @LocalServerPort
是 属性,您可以使用 @JvmStatic
对其进行注释。然后您就可以在 @DynamicPropertySource