クラス 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
フィールドサマリー
修飾子と型フィールド説明static final StringSE
メッセージストアのパーティション化に使用されるデフォルトのリージョンプロパティ。static final StringSE
テーブルプレフィックスプロパティのデフォルト値。インターフェース org.springframework.context.SmartLifecycle から継承されたフィールド
DEFAULT_PHASE
コンストラクターのサマリー
コンストラクター説明構成用の便利なコンストラクター。JdbcChannelMessageStore
(DataSourceSE dataSource) すべての必須プロパティでMessageStore
を作成します。メソッドのサマリー
修飾子と型メソッド説明void
addAllowedPatterns
(StringSE... patterns) 逆直列化が許可されているパッケージ / クラスのパターンを追加します。addMessageToGroup
(ObjectSE groupId, Message<?> message) データベースにメッセージを保存します。void
必須プロパティ(DataSource
SE およびsetChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider)
)を確認してください。protected Message<?>
doPollForMessage
(StringSE groupIdKey) このメソッドは、DB への呼び出しを実行して、JdbcChannelMessageStore
のコンテキストではチャネル識別子を意味する MessageGroup で最も古いメッセージを取得します。getMessageGroup
(ObjectSE groupId) 完全には使用されていません。int
構成済みリージョンのストア内のメッセージグループの数を返します。protected MessageGroupFactory
MessageGroupFactory
を返します。protected StringSE
getQuery
(org.springframework.integration.jdbc.store.JdbcChannelMessageStore.Query queryName, SupplierSE<StringSE> queryProvider) 入力のパターンを置き換えて、有効な SQL クエリを生成します。設定された現在のリージョン、またはデフォルトのDEFAULT_REGION
を返します。int
現在処理中のメッセージのメッセージ ID をキャッシュするメッセージ ID キャッシュのサイズを返します。boolean
boolean
boolean
int
messageGroupSize
(ObjectSE groupId) 指定されたチャネル ID (groupId) および指定されたリージョン (setRegion(String)
) に保存されているメッセージの数を返します。Message<?>
pollMessageFromGroup
(ObjectSE groupId) チャネル識別子を表す特定のグループ ID に対して永続化される新しいメッセージについて、データベースをポーリングします。void
removeFromIdCache
(StringSE messageId) idCache からメッセージ ID を削除します。void
removeMessageGroup
(ObjectSE groupId) この ID のメッセージグループを削除します。void
setChannelMessageStoreQueryProvider
(ChannelMessageStoreQueryProvider channelMessageStoreQueryProvider) 使用するデータベース固有のChannelMessageStoreQueryProvider
を設定します。void
setCheckDatabaseOnStart
(boolean checkDatabaseOnStart) 開始時にデータベースチェッククエリを実行するかどうかのフラグ。void
setDataSource
(DataSourceSE dataSource) データベースと対話するときに使用する JDBCDataSource
SE。void
setDeserializer
(Deserializer<? extends Message<?>> deserializer) バイト配列をメッセージにデシリアライズするためのコンバーター。void
setJdbcTemplate
(JdbcTemplate jdbcTemplate) データベースと対話するときに使用するJdbcOperations
。void
setLobHandler
(LobHandler lobHandler) SQL クエリでラージオブジェクトを作成およびアンパックするために使用されるLobHandler
をオーバーライドします。void
setMessageGroupFactory
(MessageGroupFactory messageGroupFactory) MessageGroupFactory
を指定して、必要な場所にMessageGroup
オブジェクトを作成します。void
setMessageRowMapper
(MessageRowMapper messageRowMapper) カスタムMessageRowMapper
の受け渡しを許可します。void
setPreparedStatementSetter
(ChannelMessageStorePreparedStatementSetter preparedStatementSetter) ChannelMessageStorePreparedStatementSetter
を設定して、メッセージをデータベースに挿入します。void
setPriorityEnabled
(boolean priorityEnabled) このストアでの優先処理を有効にします。void
このストアで保持されるすべてのメッセージの一意のグループ化識別子。void
setSerializer
(Serializer<? super Message<?>> serializer) メッセージをストレージ用のバイト配列に直列化するためのコンバーター。void
setTablePrefix
(StringSE tablePrefix) テーブルプレフィックスプロパティのパブリック setter。void
setUsingIdCache
(boolean usingIdCache) 複数の並列スレッドを使用してデータベースをトランザクションでポーリングする場合、つまり、構成済みのポーラーがタスクエグゼキューターを使用して構成されている場合は、このプロパティの使用を検討してください。void
start()
void
stop()
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.context.SmartLifecycle から継承されたメソッド
getPhase, stop
フィールドの詳細
コンストラクターの詳細
JdbcChannelMessageStore
public JdbcChannelMessageStore()構成用の便利なコンストラクター。JdbcChannelMessageStore
すべての必須プロパティを使用してMessageStore
を作成します。渡されたDataSource
SE は、JdbcTemplate.setFetchSize(int)
が1
に設定され、JdbcTemplate.setMaxRows(int)
が1
に設定されたJdbcTemplate
をインスタンス化するために使用されます。- パラメーター:
dataSource
-DataSource
SE
メソッドの詳細
setDataSource
データベースと対話するときに使用する JDBCDataSource
SE。渡されたDataSource
SE は、JdbcTemplate.setFetchSize(int)
が1
に設定され、JdbcTemplate.setMaxRows(int)
が1
に設定されたJdbcTemplate
をインスタンス化するために使用されます。- パラメーター:
dataSource
-DataSource
SE
setDeserializer
バイト配列をメッセージにデシリアライズするためのコンバーター。- パラメーター:
deserializer
- 設定するデシリアライザー
addAllowedPatterns
逆直列化できるパッケージ / クラスのパターンを追加します。クラスは完全修飾することも、クラス名の最初または最後にワイルドカード "*" を使用することもできます。例:com.foo.*
、*.MyClass
。- パラメーター:
patterns
- パターン。- 導入:
- 5.4
setJdbcTemplate
データベースと対話するときに使用するJdbcOperations
。このプロパティまたはdataSource
のいずれかを設定できます。fetchSize プロパティが 1 のJdbcTemplate
を渡すことを検討してください。これは、Oracle が先入れ先出し (FIFO) メッセージ取得特性を保証するために特に重要です。- パラメーター:
jdbcTemplate
-JdbcOperations
setLobHandler
SQL クエリで大きなオブジェクトを作成および解凍するために使用されるLobHandler
をオーバーライドします。ほとんどすべてのプラットフォームでデフォルトで問題ありませんが、一部の Oracle ドライバーにはネイティブ実装が必要です。- パラメーター:
lobHandler
-LobHandler
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
設定された現在のリージョン、またはデフォルトのDEFAULT_REGION
を返します。- 戻り値:
- 設定された領域名
- 導入:
- 6.0
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()必須プロパティ (DataSource
SE およびsetChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider)
) を確認してください。setMessageRowMapper(MessageRowMapper)
およびsetPreparedStatementSetter(ChannelMessageStorePreparedStatementSetter)
を使用してMessageRowMapper
およびChannelMessageStorePreparedStatementSetter
がそれぞれ明示的に設定されていない場合は、指定されたdeserializer
およびlobHandler
を使用してデフォルトの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
public void start()stop
public void stop()isRunning
public boolean 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 キャッシュのサイズ