クラス JdbcChannelMessageStore
- 実装されているすべてのインターフェース:
InitializingBean、Lifecycle、Phased、SmartLifecycle、BasicMessageGroupStore、ChannelMessageStore、PriorityCapableChannelMessageStore
JDBC を介したリレーショナルデータベースを使用した BasicMessageGroupStore のチャネル固有の実装。
このメッセージストアはメッセージチャネルにのみ使用されます。
そのため、JdbcChannelMessageStore はデータベース固有の SQL クエリを使用します。
JdbcMessageStore に反して、この実装はキューのように動作するように最適化された単一のデータベーステーブルを使用します。テーブルを作成するための SQL スクリプトは org/springframework/integration/jdbc/schema-*.sql にパッケージされています。* はターゲットデータベース型を示します。
このクラスは SmartLifecycle を実装し、start() で getMessageGroupCount() を呼び出して、必要なテーブルが DB に存在するかどうかを確認します。テーブルが存在しない場合、アプリケーションコンテキストは起動できません。このチェックは setCheckDatabaseOnStart(boolean) を介して無効にすることができます。
- 導入:
- 2.2
- 作成者:
- Gunnar Hillert, Artem Bilan, Gary Russell, Meherzad Lahewala, Trung Pham, Johannes Edmeier, Ngoc Nhan
フィールドのサマリー
フィールド修飾子と型フィールド説明static final StringSEメッセージストアのパーティション化に使用されるデフォルトのリージョンプロパティ。static final StringSEテーブルプレフィックスプロパティのデフォルト値。インターフェース org.springframework.context.SmartLifecycle から継承されたフィールド
DEFAULT_PHASEコンストラクターの概要
コンストラクターコンストラクター説明構成用の便利なコンストラクター。JdbcChannelMessageStore(DataSourceSE dataSource) すべての必須プロパティでMessageStoreを作成します。メソッドのサマリー
修飾子と型メソッド説明voidaddAllowedPatterns(StringSE... patterns) 逆直列化が許可されているパッケージ / クラスのパターンを追加します。addMessageToGroup(ObjectSE groupId, Message<?> message) データベースにメッセージを保存します。void必須プロパティ(DataSourceSE およびsetChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider))を確認してください。protected Message<?> doPollForMessage(StringSE groupIdKey) このメソッドは、DB への呼び出しを実行して、JdbcChannelMessageStoreのコンテキストではチャネル識別子を意味する MessageGroup で最も古いメッセージを取得します。getMessageGroup(ObjectSE groupId) 完全には使用されていません。int構成済みリージョンのストア内のメッセージグループの数を返します。protected MessageGroupFactoryMessageGroupFactoryを返します。protected StringSEgetQuery(org.springframework.integration.jdbc.store.JdbcChannelMessageStore.Query queryName, SupplierSE<StringSE> queryProvider) 入力のパターンを置き換えて、有効な SQL クエリを生成します。設定された現在のリージョン、またはデフォルトのDEFAULT_REGIONを返します。int現在処理中のメッセージのメッセージ ID をキャッシュするメッセージ ID キャッシュのサイズを返します。booleanbooleanbooleanintmessageGroupSize(ObjectSE groupId) 指定されたチャネル ID (groupId) および指定されたリージョン (setRegion(String)) に保存されているメッセージの数を返します。Message<?> pollMessageFromGroup(ObjectSE groupId) チャネル識別子を表す特定のグループ ID に対して永続化される新しいメッセージについて、データベースをポーリングします。voidremoveFromIdCache(StringSE messageId) idCache からメッセージ ID を削除します。voidremoveMessageGroup(ObjectSE groupId) この ID のメッセージグループを削除します。voidsetChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider channelMessageStoreQueryProvider) 使用するデータベース固有のChannelMessageStoreQueryProviderを設定します。voidsetCheckDatabaseOnStart(boolean checkDatabaseOnStart) 開始時にデータベースチェッククエリを実行するかどうかのフラグ。voidsetDataSource(DataSourceSE dataSource) データベースと対話するときに使用する JDBCDataSourceSE。voidsetDeserializer(Deserializer<? extends Message<?>> deserializer) バイト配列をメッセージにデシリアライズするためのコンバーター。voidsetJdbcTemplate(JdbcTemplate jdbcTemplate) データベースと対話するときに使用するJdbcOperations。voidsetMessageGroupFactory(MessageGroupFactory messageGroupFactory) MessageGroupFactoryを指定して、必要な場所にMessageGroupオブジェクトを作成します。voidsetMessageRowMapper(MessageRowMapper messageRowMapper) カスタムMessageRowMapperの受け渡しを許可します。voidsetPreparedStatementSetter(ChannelMessageStorePreparedStatementSetter preparedStatementSetter) ChannelMessageStorePreparedStatementSetterを設定して、メッセージをデータベースに挿入します。voidsetPriorityEnabled(boolean priorityEnabled) このストアでの優先処理を有効にします。voidこのストアで保持されるすべてのメッセージの一意のグループ化識別子。voidsetSerializer(Serializer<? super Message<?>> serializer) メッセージをストレージ用のバイト配列に直列化するためのコンバーター。voidsetTablePrefix(StringSE tablePrefix) テーブルプレフィックスプロパティのパブリック setter。voidsetUsingIdCache(boolean usingIdCache) 複数の並列スレッドを使用してデータベースをトランザクションでポーリングする場合、つまり、構成済みのポーラーがタスクエグゼキューターを使用して構成されている場合は、このプロパティの使用を検討してください。voidstart()voidstop()クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSEインターフェース org.springframework.context.SmartLifecycle から継承されたメソッド
getPhase, stop
フィールドの詳細
DEFAULT_REGION
メッセージストアを分割するために使用されるデフォルトのリージョンプロパティ。例: チャネル名が重複している別の Spring Integration アプリケーションは、個別のリージョン名を指定することにより、同じメッセージストアを使用できます。- 関連事項:
DEFAULT_TABLE_PREFIX
コンストラクターの詳細
JdbcChannelMessageStore
public JdbcChannelMessageStore()構成用の便利なコンストラクター。JdbcChannelMessageStore
すべての必須プロパティを使用してMessageStoreを作成します。渡されたDataSourceSE は、JdbcTemplate.setFetchSize(int)が1に設定され、JdbcTemplate.setMaxRows(int)が1に設定されたJdbcTemplateをインスタンス化するために使用されます。- パラメーター:
dataSource-DataSourceSE
メソッドの詳細
setDataSource
データベースと対話するときに使用する JDBCDataSourceSE。渡されたDataSourceSE は、JdbcTemplate.setFetchSize(int)が1に設定され、JdbcTemplate.setMaxRows(int)が1に設定されたJdbcTemplateをインスタンス化するために使用されます。- パラメーター:
dataSource-DataSourceSE
setDeserializer
バイト配列をメッセージにデシリアライズするためのコンバーター。- パラメーター:
deserializer- 設定するデシリアライザー
addAllowedPatterns
逆直列化できるパッケージ / クラスのパターンを追加します。クラスは完全修飾することも、クラス名の最初または最後にワイルドカード "*" を使用することもできます。例:com.foo.*、*.MyClass。- パラメーター:
patterns- パターン。- 導入:
- 5.4
setJdbcTemplate
データベースと対話するときに使用するJdbcOperations。このプロパティまたはdataSourceのいずれかを設定できます。fetchSize プロパティが 1 のJdbcTemplateを渡すことを検討してください。これは、Oracle が先入れ先出し (FIFO) メッセージ取得特性を保証するために特に重要です。- パラメーター:
jdbcTemplate-JdbcOperations
setMessageRowMapper
カスタムMessageRowMapperの受け渡しを許可します。MessageRowMapperは、永続化されたメッセージを表す選択されたデータベース行を実際のMessageオブジェクトに変換するために使用されます。- パラメーター:
messageRowMapper- null であってはなりません
setPreparedStatementSetter
public void setPreparedStatementSetter(ChannelMessageStorePreparedStatementSetter preparedStatementSetter) ChannelMessageStorePreparedStatementSetterを設定して、メッセージをデータベースに挿入します。- パラメーター:
preparedStatementSetter- 使用するChannelMessageStorePreparedStatementSetter。null であってはなりません- 導入:
- 5.0
setChannelMessageStoreQueryProvider
public void setChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider channelMessageStoreQueryProvider) 使用するデータベース固有のChannelMessageStoreQueryProviderを設定します。JdbcChannelMessageStoreは、データベースからメッセージを取得するための SQL クエリを提供します。フレームワークによって提供される実装を確認するには、JavaDocsChannelMessageStoreQueryProvider(すべての既知の実装クラス)を参照してください。追加のデータベースをサポートする必要がある場合、および / または要件に合わせてクエリを微調整する必要がある場合は、独自のクエリ実装を提供できます。
- パラメーター:
channelMessageStoreQueryProvider- null であってはなりません。
setRegion
このストアで保持されるすべてのメッセージの一意のグループ化識別子。複数のリージョンを使用すると、さまざまな目的でストアを(必要に応じて)パーティション化できます。デフォルトはDEFAULT_REGIONです。- パラメーター:
region- 設定する領域名
getRegion
setSerializer
メッセージをストレージ用のバイト配列に直列化するためのコンバーター。- パラメーター:
serializer- 設定するシリアライザー
setTablePrefix
テーブルプレフィックスプロパティのパブリック setter。これは、クエリが実行される前にすべてのテーブル名の前に付けられます。デフォルトはDEFAULT_TABLE_PREFIXです。- パラメーター:
tablePrefix- 設定する tablePrefix
setUsingIdCache
public void setUsingIdCache(boolean usingIdCache) 複数の並列スレッドを使用してデータベースをトランザクションでポーリングする場合、つまり、構成済みのポーラーがタスクエグゼキューターを使用して構成されている場合は、このプロパティの使用を検討してください。
課題は、
pollMessageFromGroup(Object)が指定されたチャネル (groupKey) と領域 (setRegion(String)) の最も古いエントリを検索することです。これを複数のスレッドで実行し、トランザクションを使用している場合、他のスレッドが同じロックされた行を待機している可能性があります。提供されている
OracleChannelMessageStoreQueryProviderを使用する場合は、usingIdCacheを true に設定しないでください。Oracle クエリはロックされた行を無視するためです。JdbcChannelMessageStoreは、ID キャッシュを使用して、処理中、各メッセージ ID をメモリ内コレクションに格納します。これにより、ポーリングスレッドは、それらのメッセージをポーリングから明示的に除外します。これを機能させるには、対応する
TransactionSynchronizationFactoryを設定する必要があります。
この<int:transaction-synchronization-factory id="syncFactory"> <int:after-commit expression="@jdbcChannelMessageStore.removeFromIdCache(headers.id.toString())" /> <int:after-rollback expression="@jdbcChannelMessageStore.removeFromIdCache(headers.id.toString())" /> </int:transaction-synchronization-factory>TransactionSynchronizationFactoryは、ポーラーのトランザクション構成で参照されます。<int:poller fixed-delay="300" receive-timeout="500" max-messages-per-poll="1" task-executor="pool"> <int:transactional propagation="REQUIRED" synchronization-factory="syncFactory" isolation="READ_COMMITTED" transaction-manager="transactionManager" /> </int:poller>- パラメーター:
usingIdCache-trueの場合、ID キャッシュが使用されます。
setPriorityEnabled
public void setPriorityEnabled(boolean priorityEnabled) このストアでの優先処理を有効にします。- パラメーター:
priorityEnabled- 優先処理が有効かどうか。
isPriorityEnabled
public boolean isPriorityEnabled()- 次で指定:
- インターフェース
PriorityCapableChannelMessageStoreのisPriorityEnabled - 戻り値:
- このチャネルメッセージストアでメッセージ優先度が有効になっている場合は true。
setMessageGroupFactory
- パラメーター:
messageGroupFactory- 使用するMessageGroupFactory。- 導入:
- 4.3
getMessageGroupFactory
MessageGroupFactoryを返します。afterPropertiesSet
public void afterPropertiesSet()必須プロパティ (DataSourceSE およびsetChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider)) を確認してください。setMessageRowMapper(MessageRowMapper)およびsetPreparedStatementSetter(ChannelMessageStorePreparedStatementSetter)を使用してMessageRowMapperおよびChannelMessageStorePreparedStatementSetterがそれぞれ明示的に設定されていない場合は、指定されたdeserializerを使用してデフォルトのMessageRowMapperおよびChannelMessageStorePreparedStatementSetterがインスタンス化されます。また、jdbcTemplate の fetchSize プロパティ (JdbcTemplate.getFetchSize()) が 1 でない場合、警告がログに記録されます。JdbcChannelMessageStoreを Oracle とともに使用する場合、ポーリングされたメッセージの FIFO 特性を保証するために、fetchSize の値が 1 である必要があります。詳細については、OracleChannelMessageStoreQueryProviderを参照してください。- 次で指定:
- インターフェース
InitializingBeanのafterPropertiesSet
setCheckDatabaseOnStart
public void setCheckDatabaseOnStart(boolean checkDatabaseOnStart) 開始時にデータベースチェッククエリを実行するかどうかのフラグ。- パラメーター:
checkDatabaseOnStart- データベースチェックを実行しない場合は false。- 導入:
- 6.2
isAutoStartup
public boolean isAutoStartup()- 次で指定:
- インターフェース
SmartLifecycleのisAutoStartup
start
stop
isRunning
addMessageToGroup
メッセージをデータベースに保存します。groupId は、メッセージを保存するチャネルを識別します。実際の groupId (チャネル識別子) は、文字列ベースの UUID 識別子に変換されることに注意してください。- 次で指定:
- インターフェース
BasicMessageGroupStoreのaddMessageToGroup - パラメーター:
groupId- メッセージを保存するグループ IDmessage- メッセージ- 戻り値:
- メッセージグループ。
getMessageGroup
完全には使用されていません。指定されたグループ ID のみをラップします。- 次で指定:
- インターフェース
BasicMessageGroupStoreのgetMessageGroup - パラメーター:
groupId- グループ識別子。- 戻り値:
- メッセージのグループ。このキーにメッセージが存在しない場合は空です。
getMessageGroupCount
構成済みリージョンのストア内のメッセージグループの数を返します。- 戻り値:
- メッセージグループの数。
getQuery
protected StringSE getQuery(org.springframework.integration.jdbc.store.JdbcChannelMessageStore.Query queryName, SupplierSE<StringSE> queryProvider) 入力のパターンを置き換えて、有効な SQL クエリを生成します。この実装は、単純なマップベースのキャッシュを遅延して初期化し、名前付きクエリへの最初のアクセスでテーブルプレフィックスのみを置き換えます。後続のアクセスはキャッシュから解決されます。- パラメーター:
queryName- 変換されるJdbcChannelMessageStore.Query。queryProvider- クエリテンプレートを提供するサプライヤー。- 戻り値:
- 置換を伴う変換されたクエリ。
messageGroupSize
指定されたチャネル ID (groupId) および指定されたリージョン (setRegion(String)) に保存されているメッセージの数を返します。- 次で指定:
- インターフェース
BasicMessageGroupStoreのmessageGroupSize - パラメーター:
groupId- グループ識別子。- 戻り値:
- メッセージグループのサイズ。
removeMessageGroup
インターフェースからコピーされた説明:BasicMessageGroupStoreこの ID のメッセージグループを削除します。- 次で指定:
- インターフェース
BasicMessageGroupStoreのremoveMessageGroup - パラメーター:
groupId- 削除するグループの ID。
pollMessageFromGroup
チャネル識別子を表す特定のグループ ID に対して永続化される新しいメッセージについて、データベースをポーリングします。- 次で指定:
- インターフェース
BasicMessageGroupStoreのpollMessageFromGroup - パラメーター:
groupId- グループ識別子。- 戻り値:
- メッセージ。
doPollForMessage
このメソッドは、DB への呼び出しを実行して、JdbcChannelMessageStoreのコンテキストではチャネル識別子を意味する MessageGroup で最も古いメッセージを取得します。- パラメーター:
groupIdKey- メッセージグループ(チャネル)ID の文字列表現- 戻り値:
- メッセージ ; クエリがメッセージを生成しなかった場合は null になる可能性があります
removeFromIdCache
idCache からメッセージ ID を削除します。トランザクションが成功またはロールバックされたら、メッセージ ID キャッシュからメッセージを削除するには、Spring Integration トランザクション同期機能と組み合わせて使用する必要があります。setUsingIdCache(boolean)がtrueに設定されている場合にのみ適用されます。- パラメーター:
messageId- メッセージ識別子。
getSizeOfIdCache
現在処理中のメッセージのメッセージ ID をキャッシュするメッセージ ID キャッシュのサイズを返します。- 戻り値:
- メッセージ ID キャッシュのサイズ