51.16.6. PostgreSQL 问题单
有特殊的数据库可能会导致 JdbcAggregationRepository 使用优化的锁定问题。如果数据完整性冲突异常(SQLState 23505)除外),PostgreSQL 会将连接标记为无效。这使得连接在嵌套事务中有效不可用。详情请参考 文档。
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 连接标记为无效。