Spring启动| spring EL 与注释属性值一起使用以使用属性设置任意随机值
Spring Boot | spring EL using with annotation attribute value to set any random value using properties
我正在使用一个现有的 spring 引导注释,并希望使用 spring 表达式动态设置属性值,并希望将一个常量值作为前缀,
示例代码片段
@KafkaListener(topics="${topic.name}", groupId="#{'consumergroup' + (int)(java.lang.Math).random() }")
public void consumerMethod(){
}
我想使用上述实现方式为每个新容器创建一个新的消费者组。
但我遇到了以下异常。
Expression parsing failed; nested exception is
org.springframework.expression.spel.SpelParseException: EL1041E: After
parsing a valid expression, there is still more data in the
expression: 'lparen(()
请帮助我使用 模板 spring EL 或任何其他我可以用来设置具有常量前缀的动态消费者组 ID 的方式。
groupId="#{'consumergroup' + (100 * T(Math).random()).intValue() }"
- SpEL 中没有
cast
运算符。仅仅因为它在内部使用 ConversionService
来从一种类型转换为另一种类型。我以任何方式使用 intValue()
,因为 random()
的结果是 Double
(不是 double
)-SpEL 确实强制转换为类型包装器以 API 方便。
java.lang
自动导入到 SpEL 上下文中。 Math
类型无需添加。
100 *
。请参阅 Math.random()
JavaDocs:它 returns 介于 0.0
和 1.0
之间的值。所以,投射到 int
总是只会给你带来 0
。铸造不做四舍五入。
另请参阅 Spring 引导配置属性功能,您可以在其中为 groupId
:
使用随机值
spring.kafka.consumer.group-id=consumergroup${random.int}
我正在使用一个现有的 spring 引导注释,并希望使用 spring 表达式动态设置属性值,并希望将一个常量值作为前缀,
示例代码片段
@KafkaListener(topics="${topic.name}", groupId="#{'consumergroup' + (int)(java.lang.Math).random() }")
public void consumerMethod(){
}
我想使用上述实现方式为每个新容器创建一个新的消费者组。
但我遇到了以下异常。
Expression parsing failed; nested exception is org.springframework.expression.spel.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'lparen(()
请帮助我使用 模板 spring EL 或任何其他我可以用来设置具有常量前缀的动态消费者组 ID 的方式。
groupId="#{'consumergroup' + (100 * T(Math).random()).intValue() }"
- SpEL 中没有
cast
运算符。仅仅因为它在内部使用ConversionService
来从一种类型转换为另一种类型。我以任何方式使用intValue()
,因为random()
的结果是Double
(不是double
)-SpEL 确实强制转换为类型包装器以 API 方便。 java.lang
自动导入到 SpEL 上下文中。Math
类型无需添加。100 *
。请参阅Math.random()
JavaDocs:它 returns 介于0.0
和1.0
之间的值。所以,投射到int
总是只会给你带来0
。铸造不做四舍五入。
另请参阅 Spring 引导配置属性功能,您可以在其中为 groupId
:
spring.kafka.consumer.group-id=consumergroup${random.int}