51.16.6. PostgreSQL 问题单
有特殊的数据库可能会导致 JdbcAggregationRepository
使用优化式锁定时出现问题。在数据完整性违反异常时,PostgreSQL 会将连接标记为无效(一个具有 SQLState 23505)。这使得连接在嵌套的事务中有效不可用。可在文档中找到详细信息。https://www.postgresql.org/message-id/200609241203.59292.ralf.wiebicke%40exedio.com
org.apache.camel.aggregate.jdbc.PostgresAggregationRepository
扩展 JdbcAggregationRepository
,并使用特殊的 INSERT。ONCONFLICT .
用来提供优化锁定行为的声明。
此声明为 (具有默认聚合表定义):
INSERT INTO aggregation (id, exchange) values (?, ?) ON CONFLICT DO NOTHING
INSERT INTO aggregation (id, exchange) values (?, ?) ON CONFLICT DO NOTHING
可在 PostgreSQL 文档 中找到详细信息。
当使用此子句时,java.sql.PreparedStatement.executeUpdate ()
调用返回 0,
而不是通过 SQLState=23505 引发 SQLException。进一步处理与通用 JdbcAggregationRepository
完全相同,但不将 PostgreSQL 连接标记为无效。