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
详情请查看 PostgreSQL 文档。
当使用此 子句时,java.sql.PreparedStatement.executeUpdate ()
调用返回 0,
而不是用 SQLState=23505 丢弃 SQLException。进一步处理与通用 JdbcAggregationRepository
完全相同,但没有将 PostgreSQL 连接标记为无效。