Spring integration 动态更新jdbc:inbound通道适配器查询语句

Spring integration 动态更新jdbc:inbound通道适配器查询语句,spring-integration,Spring Integration,我们使用带有轮询器的jdbc:inbound channel adapter从表中进行选择。要求是选择具有特定范围内时间戳的行。每次轮询数据库时都必须更新该范围(因此不会读取两次行)。最初我设想使用一个单独的表来存储日期时间,并使用适配器的update属性来更新这个表。然后,该值将在query属性中定义的SELECT语句中使用,作为针对主表的WHERE子句的一部分 现在我们被告知,虽然我们将拥有对主表的读取权限,但我们将没有向现有模式添加任何内容的权限,或者没有写入权限。这就排除了使用一个单独的

我们使用带有轮询器的
jdbc:inbound channel adapter
从表中进行选择。要求是选择具有特定范围内时间戳的行。每次轮询数据库时都必须更新该范围(因此不会读取两次行)。最初我设想使用一个单独的表来存储日期时间,并使用适配器的
update
属性来更新这个表。然后,该值将在
query
属性中定义的SELECT语句中使用,作为针对主表的WHERE子句的一部分

现在我们被告知,虽然我们将拥有对主表的读取权限,但我们将没有向现有模式添加任何内容的权限,或者没有写入权限。这就排除了使用一个单独的表来不断更新主SQL查询使用的时间戳的可能性

query
属性中定义一些将返回动态生成的SELECT语句的SpEL的选项也将不起作用。这是因为当弹簧加载时,SpEL将只评估一次

查询
属性中是否有其他方法动态更新SQL

否则,此用例的正确策略是什么,适配器使用的SQL必须在每次轮询数据库时更改


谢谢

您可以向适配器添加参数源,并使用如下查询:

"SELECT * from FOO where KEY=:key"
请参见属性
选择sql参数源


您可以编写自己的参数源,但也可以参见ExpressionEvaluationSqlParameterSourceFactory

另请参见ExpressionEvaluationSqlParameterSourceFactory。