46.16.6. PostgreSQL 问题单
有特殊的数据库可能导致 JdbcAggregationRepository
使用选择的锁定出现问题。在数据完整性违反异常时,PostgreSQL 会将连接标记为无效(SQLState 23505)。这使得连接在嵌套的事务中有效不可用。可在文档中找到详细信息。https://www.postgresql.org/message-id/200609241203.59292.ralf.wiebicke%40exedio.com
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 连接标记为无效。