51.16. 将正文和标头存储为文本


您可以配置 JdbcAggregationRepository 以存储消息正文,并在单独的列中选择(ed)标头作为字符串。例如,要存储正文,以下两个标头 companyNameaccountName 均使用以下 SQL:

CREATE TABLE aggregationRepo3 (
 id varchar(255) NOT NULL,
 exchange blob NOT NULL,
 version BIGINT NOT NULL,
 body varchar(1000),
 companyName varchar(1000),
 accountName varchar(1000),
 constraint aggregationRepo3_pk PRIMARY KEY (id)
);
CREATE TABLE aggregationRepo3_completed (
 id varchar(255) NOT NULL,
 exchange blob NOT NULL,
 version BIGINT NOT NULL,
 body varchar(1000),
 companyName varchar(1000),
 accountName varchar(1000),
 constraint aggregationRepo3_completed_pk PRIMARY KEY (id)
);
Copy to Clipboard Toggle word wrap

然后,配置存储库以启用此行为,如下所示:

<bean id="repo3"
  class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
  <property name="repositoryName" value="aggregationRepo3"/>
  <property name="transactionManager" ref="txManager3"/>
  <property name="dataSource" ref="dataSource3"/>
  <!-- configure to store the message body and following headers as text in the repo -->
  <property name="storeBodyAsText" value="true"/>
  <property name="headersToStoreAsText">
    <list>
      <value>companyName</value>
      <value>accountName</value>
    </list>
  </property>
</bean>
Copy to Clipboard Toggle word wrap

51.16.1. codec (Serialization)

由于它们可以包含任何类型的载荷,因此交换不可按设计序列化。它将转换为字节数组,以存储在数据库 BLOB 字段中。所有这些转换都由 JdbcCodec 类处理。代码的一个详细信息需要注意: ClassLoadingAwareObjectInputStream

ClassLoadingAwareObjectInputStream 已从 Apache ActiveMQ 项目中重复使用。它打包 ObjectInputStream,并将它与 ContextClassLoader 而不是 当前的Threader 一起使用。这样做的好处是能够加载由其他捆绑包公开的类。这允许交换正文和标头具有自定义类型对象引用。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat