326.13. 使用基于 JDBC 的幂等存储库
可用作 Camel 2.7: 在本节中,我们将使用基于 JDBC 的幂等存储库。
					TIP:*Abstract 类* From Camel 2.9 开始存在抽象类 org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository,您可以扩展为构建自定义 JDBC 幂等存储库。
				
首先,我们必须创建供幂等存储库使用的数据库表。对于 Camel 2.7,我们使用以下模式:
CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255), messageId VARCHAR(100) )
CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255),
messageId VARCHAR(100) )
在 Camel 2.8 中,我们添加了 createdAt 列:
CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255), messageId VARCHAR(100), createdAt TIMESTAMP )
CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255),
messageId VARCHAR(100), createdAt TIMESTAMP )
警告:SQL 服务器 TIMESTAMP 类型是一个固定长度的二进制字符串类型。它不能映射到任何 JDBC 时间类型: DATE、TIME 或 TIMESTAMP。
自定义 JdbcMessageIdRepository
					从 Camel 2.9.1 开始,您可以有一些选项来调整 org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository :
				
| 参数 | 默认值 | 描述 | 
|---|---|---|
|   createTableIfNotExists  |   true  |   定义 Camel 是否应该尝试创建表(如果不存在)。  | 
|   tableExistsString  |   SELECT 1 FROM CAMEL_MESSAGEPROCESSED WHERE 1 = 0  |   此查询用于找出表是否已存在。它必须抛出异常来指示表不存在。  | 
|   createString  |   CREATE TABLE CAMEL_MESSAGEPROCESSED (processorName VARCHAR (255), messageId VARCHAR (100) createdAt TIMESTAMP)  |   用于创建表的 语句。  | 
|   queryString  |   SELECT COUNT(*) FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?AND messageId = ?  |   
									用于查明存储库中消息是否已存在的查询(结果不等于 '0')。它取两个参数。第一个是处理器名称(  | 
|   insertString  |   INSERT INTO CAMEL_MESSAGEPROCESSED (processorName、MessageId、createdAt) valueS (?、?、?)  |   
									语句用于将条目添加到表中。它采用三个参数。第一个是处理器名称(  | 
|   deleteString  |   DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?AND messageId = ?  |   
									语句用于从数据库中删除条目。它取两个参数。第一个是处理器名称(  |