gpt4 book ai didi

Spring SpEL 访问 Configuration-Bean

转载 作者:行者123 更新时间:2023-12-04 01:28:00 24 4
gpt4 key购买 nike

我在一个遗留软件中工作,其中大部分配置是从 application.properties 外部化的。它位于一个名为 custom.properties 的文件中它将被读入这样声明的配置 bean。

@Configuration
@ConfigurationProperties(locations = "classpath:custom.properties", ignoreUnknownFields = true, prefix = "custom")
public class CustomProperties {
...
}

此应用程序有一些计划任务,它们声明以固定的时间间隔和时间工作。 @Scheduled(cron = "0 0 16 * * 3")直到现在一切正常。最近有人要求我在可配置的时间执行此 cronjob。所以我在 custom.properties 中添加了另一个属性和 CustomProperties 的属性(包括 getter 和 setter)。接下来,我将预定的注释更改为如下所示。 @Scheduled(cron = "${@customProperties.cronJob1Schedule}")
当我启动应用程序时,出现以下异常:
java.lang.IllegalStateException: Encountered invalid @Scheduled method 'cronJob1': Could not resolve placeholder '@customProperties.cronJob1Schedule' in string value "${@bwvProperties.cronJob1Schedule}"
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.processScheduled(ScheduledAnnotationBeanPostProcessor.java:406)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.postProcessAfterInitialization(ScheduledAnnotationBeanPostProcessor.java:282)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)

以前有人遇到过这个问题吗?为什么我无法访问 SpEL 中的配置 bean?

最佳答案

请注意,Spring 处理的字符串值有两种不同的机制:

属性解析 - ${my.property}
Spring 能够替换占位符 ${placeholder}使用配置的 property sources 中的值.这个过程只是用字符串值替换字符串键(如果需要,通过 converter 运行它)。

Spring 表达式语言评估 - #{spel.expression}
Spring 能够运行 #{} 的内容通过SPeL口译员。这提供了更强大的工具,因为您可以从表达式内部与应用程序代码进行交互,例如通过从您的 bean 中获取属性 #{@cumstomProperties.cronJob1Schedule} .

TL;博士

你只需要切换${对于 #{在您的注释值中。

关于Spring SpEL 访问 Configuration-Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52179645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com