326.17. PostgreSQL 问题单
有特殊的数据库可能会导致 JdbcAggregationRepository
使用的最佳锁定问题。在数据完整性违反异常时,PostgreSQL 会将连接标记为无效( SQLState 23505 之一)。这使得连接在嵌套的事务中有效无法使用。详情请查看 本文档。
org.apache.camel.processor.aggregate.jdbc.PostgresAggregationRepository
扩展 JdbcAggregationRepository
,并使用特殊的 INSERT .ON CONFLICT ..
语句以提供最佳锁定行为。
此语句(具有默认聚合表定义):
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 连接标记为无效。