gpt4 book ai didi

java - 即使设置了 spring.expression.compiler.mode,Spring SpEL 也不会编译

转载 作者:行者123 更新时间:2023-12-01 16:42:54 30 4
gpt4 key购买 nike

我有一个 SpEL 表达式,我试图将其用于 FtpMessageHandler(特别是用于 outputHandler.setRemoteDirectoryExpressionString("headers['"+ ftpOutPath + "']");)。

通过调试我发现这个 SpEL 表达式没有被编译。当编译时间到来时,SpelCompilerMode 将设置为 OFF。因此,表达式不会被编译,只是返回 null(并且我的 FTP 客户端尝试只写入根目录,而不是我指定的根目录)。

查看 Spring SpEL 文档 ( https://docs.spring.io/spring/docs/5.3.0-SNAPSHOT/spring-framework-reference/core.html#expressions ),它说为了启用 SpEL 编译,您需要设置属性 spring.expression.compiler.mode。我这样做没有效果 - 我已在 application.properties 文件中将 spring.expression.compiler.mode 设置为 immediate,但 SpelCompilerMode仍然是关闭

为什么会发生这种情况?我该如何解决这个问题?

我知道有人会要求提供代码示例,但老实说,我不知道我能提供什么,因为这都是 Spring 内部的东西。但这里有一些相关代码的示例:

FtpMessageHandler:

    @Value("${my.ftp.outPath}")
private String ftpOutPath;

@Bean
@ServiceActivator(inputChannel = "myChannel")
public MessageHandler getOutputHandle(){
FtpMessageHandler outputHandler = new FtpMessageHandler(mySessionFactory());
outputHandler.setRemoteDirectoryExpressionString("headers['" + ftpOutPath + "']");
return outputHandler;
}

application.yaml

spring:
expression:
compiler:
mode: immediate

my:
ftp:
outPath: myPath

最佳答案

我仍然不确定为什么表达式没有正确编译/解释,但是将代码更改为使用 LiteralExpression 有效,而不是使用字符串。

outputHandler.setRemoteDirectoryExpression(new LiteralExpression(ftpOutPath));

关于java - 即使设置了 spring.expression.compiler.mode,Spring SpEL 也不会编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61824826/

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