我们正在使用jdbc:inbound-channel-adapter
和poller
从表格中进行选择。要求是选择具有特定范围内的时间戳的行。每次轮询数据库时都必须更新该范围(因此行不会被读取两次)。最初我设想有一个单独的表来存储日期时间,并使用适配器的update
属性来更新此表。然后,此值将在query
属性中定义的SELECT语句中使用,作为针对主表的WHERE子句的一部分。
我们现在被告知,虽然我们将具有对主表的读访问权限,但我们不会被授予向现有模式添加任何内容或具有写权限的权限。这排除了使用单独的表来连续更新主SQL查询使用的时间戳。
在query
属性中定义一些将返回动态生成的SELECT语句的SpEL的选项也不起作用。这是因为Spel只会在Spring加载时进行一次评估。
是否有另一种方法可以动态更新query
属性中的SQL?
否则,此用例的正确策略是什么,每次轮询数据库时,适配器使用的SQL必须更改?
由于
答案 0 :(得分:0)
您可以将参数源添加到适配器并使用以下查询:
"SELECT * from FOO where KEY=:key"
参见属性select-sql-parameter-source
。
您可以编写自己的参数来源,但也可以参阅ExpressionEvaluatingSqlParameterSourceFactory
。