クラス JdbcMessageStore

実装されているすべてのインターフェース:
IterableSE<MessageGroup>AwareBeanClassLoaderAwareLifecyclePhasedSmartLifecycleBasicMessageGroupStoreMessageGroupStoreMessageStore

public class JdbcMessageStore extends AbstractMessageGroupStore implements MessageStore, BeanClassLoaderAware, SmartLifecycle
JDBC を介したリレーショナルデータベースを使用した MessageStore の実装。必要なテーブルを作成するための SQL スクリプトは、org/springframework/integration/jdbc/schema-*.sql としてパッケージ化されています。ここで、* はターゲットデータベース型です。

JDBC ベースのメッセージストアを使用して MessageChannel をバックアップする場合は、代わりにチャネル固有の JdbcChannelMessageStore の使用を検討してください。この実装は、相関コンポーネント(<aggregator> など)、<delayer> などを対象としています。

このクラスは SmartLifecycle を実装し、start()getMessageGroupCount() を呼び出して、必要なテーブルが DB に存在するかどうかを確認します。テーブルが存在しない場合、アプリケーションコンテキストは起動できません。このチェックは setCheckDatabaseOnStart(boolean) を介して無効にすることができます。

導入:
2.0
作成者:
Dave Syer, Oleg Zhurakousky, Matt Stine, Gunnar Hillert, Will Schipp, Gary Russell, Artem Bilan, Ngoc Nhan, Youbin Wu
  • フィールドの詳細

    • DEFAULT_TABLE_PREFIX

      public static final StringSE DEFAULT_TABLE_PREFIX
      テーブルプレフィックスプロパティのデフォルト値。
      関連事項:
  • コンストラクターの詳細

    • JdbcMessageStore

      public JdbcMessageStore(DataSourceSE dataSource)
      すべての必須プロパティで MessageStore を作成します。
      パラメーター:
      dataSource - DataSourceSE
    • JdbcMessageStore

      public JdbcMessageStore(JdbcOperations jdbcOperations)
      すべての必須プロパティで MessageStore を作成します。
      パラメーター:
      jdbcOperations - JdbcOperations
      導入:
      4.3.9
  • メソッドの詳細

    • setBeanClassLoader

      public void setBeanClassLoader(ClassLoaderSE classLoader)
      次で指定:
      インターフェース BeanClassLoaderAwaresetBeanClassLoader 
    • setTablePrefix

      public void setTablePrefix(StringSE tablePrefix)
      テーブルプレフィックスプロパティのパブリック setter。これは、クエリが実行される前にすべてのテーブル名の前に付けられます。デフォルトは DEFAULT_TABLE_PREFIX です。
      パラメーター:
      tablePrefix - 設定する tablePrefix
    • setRegion

      public void setRegion(StringSE region)
      このストアで永続化されるすべてのメッセージの一意のグループ化識別子。複数のリージョンを使用すると、さまざまな目的でストアを(必要に応じて)パーティション化できます。デフォルトは DEFAULT です。
      パラメーター:
      region - 設定する領域名
    • setSerializer

      public void setSerializer(Serializer<? super Message<?>> serializer)
      メッセージをストレージ用のバイト配列に直列化するためのコンバーター。
      パラメーター:
      serializer - 設定するシリアライザー
    • setDeserializer

      public void setDeserializer(Deserializer<? extends Message<?>> deserializer)
      バイト配列をメッセージに逆直列化するためのコンバーター。
      パラメーター:
      deserializer - 設定するデシリアライザー
    • addAllowedPatterns

      public void addAllowedPatterns(StringSE... patterns)
      逆直列化できるパッケージ / クラスのパターンを追加します。クラスは完全修飾することも、クラス名の最初または最後にワイルドカード "*" を使用することもできます。例: com.foo.**.MyClass
      パラメーター:
      patterns - パターン。
      導入:
      5.4
    • setCheckDatabaseOnStart

      public void setCheckDatabaseOnStart(boolean checkDatabaseOnStart)
      開始時にデータベースチェッククエリを実行するかどうかのフラグ。
      パラメーター:
      checkDatabaseOnStart - データベースチェックを実行しない場合は false。
      導入:
      6.2
    • isAutoStartup

      public boolean isAutoStartup()
      次で指定:
      インターフェース SmartLifecycleisAutoStartup 
    • start

      public void start()
      次で指定:
      インターフェース Lifecyclestart 
    • stop

      public void stop()
      次で指定:
      インターフェース Lifecyclestop 
    • isRunning

      public boolean isRunning()
      次で指定:
      インターフェース LifecycleisRunning 
    • removeMessage

      public Message<?> removeMessage(UUIDSE id)
      インターフェースからコピーされた説明: MessageStore
      指定された ID を持つメッセージが MessageStore から削除されます (存在する場合)。その ID を持つメッセージがストアに存在しない場合は、null が返されます。このメソッドが MessageGroupStore に実装されている場合、このメッセージを保持するグループがない場合にのみ、メッセージはストアから削除されます。
      次で指定:
      インターフェース MessageStoreremoveMessage 
      パラメーター:
      id - メッセージ識別子。
      戻り値:
      メッセージ (ある場合)。
    • getMessageCount

      @ManagedAttribute public long getMessageCount()
      インターフェースからコピーされた説明: MessageStore
      ストア内のメッセージ数を示すオプションの属性。実装は例外をスローすることで応答を拒否する場合があります。
      次で指定:
      インターフェース MessageStoregetMessageCount 
      戻り値:
      メッセージの数。
    • getMessage

      public Message<?> getMessage(UUIDSE id)
      次で指定:
      インターフェース MessageStoregetMessage 
      パラメーター:
      id - メッセージ識別子。
      戻り値:
      指定された ID のメッセージ。MessageStore にその ID のメッセージが存在しない場合は null
    • getMessageMetadata

      public MessageMetadata getMessageMetadata(UUIDSE id)
      インターフェースからコピーされた説明: MessageStore
      提供された id によって MessageMessageMetadata を返します。
      次で指定:
      インターフェース MessageStoregetMessageMetadata 
      パラメーター:
      id - メッセージ識別子。
      戻り値:
      指定された ID の MessageMetadata、またはその ID のメッセージが MessageStore に存在しないか、メッセージにメタデータがない場合(以前のバージョンのレガシーメッセージ)は null
    • addMessage

      public <T> Message<T> addMessage(Message<T> message)
      インターフェースからコピーされた説明: MessageStore
      提供されたメッセージを MessageStore に入れます。ストアはメッセージを内部で変更する必要がある場合があり、その場合、戻り値は入力と異なる場合があります。戻り値の ID は、MessageStore.getMessage(UUID) および MessageStore.removeMessage(UUID) が正しく動作するようにインデックスとして使用されます。メッセージは不変であるため、同じメッセージを複数回入力しても何も起こりません。
      次で指定:
      インターフェース MessageStoreaddMessage 
      型パラメーター:
      T - ペイロード型。
      パラメーター:
      message - メッセージ。
      戻り値:
      保存されたメッセージ。
    • doAddMessagesToGroup

      protected void doAddMessagesToGroup(ObjectSE groupId, Message<?>... messages)
      次で指定:
      クラス AbstractMessageGroupStoredoAddMessagesToGroup 
    • getMessageGroupCount

      @ManagedAttribute public int getMessageGroupCount()
      インターフェースからコピーされた説明: MessageGroupStore
      メッセージグループの数を示すオプションの属性。実装は、例外をスローすることによって応答を拒否する場合があります。
      次で指定:
      インターフェース MessageGroupStoregetMessageGroupCount 
      オーバーライド:
      クラス AbstractMessageGroupStoregetMessageGroupCount 
      戻り値:
      メッセージグループの数
    • getMessageCountForAllMessageGroups

      @ManagedAttribute public int getMessageCountForAllMessageGroups()
      インターフェースからコピーされた説明: MessageGroupStore
      すべてのグループにわたるストア内のメッセージの数を示すオプションの属性。実装は、例外をスローすることによって応答を拒否する場合があります。
      次で指定:
      インターフェース MessageGroupStoregetMessageCountForAllMessageGroups 
      オーバーライド:
      クラス AbstractMessageGroupStoregetMessageCountForAllMessageGroups 
      戻り値:
      メッセージの数
    • messageGroupSize

      @ManagedAttribute public int messageGroupSize(ObjectSE groupId)
      インターフェースからコピーされた説明: BasicMessageGroupStore
      この MessageGroup のサイズを返します。
      次で指定:
      インターフェース BasicMessageGroupStoremessageGroupSize 
      パラメーター:
      groupId - グループ識別子。
      戻り値:
      サイズ。
    • getMessageGroup

      public MessageGroup getMessageGroup(ObjectSE groupId)
      インターフェースからコピーされた説明: BasicMessageGroupStore
      このグループ ID で BasicMessageGroupStore.addMessageToGroup(Object, Message) を使用して保存された、現在 MessageStore にあるすべてのメッセージを返します。
      次で指定:
      インターフェース BasicMessageGroupStoregetMessageGroup 
      パラメーター:
      groupId - グループ識別子。
      戻り値:
      メッセージのグループ。このキーにメッセージが存在しない場合は空です。
    • getGroupMetadata

      public MessageGroupMetadata getGroupMetadata(ObjectSE groupId)
      インターフェースからコピーされた説明: MessageGroupStore
      メッセージをフェッチせずにグループメタデータを取得します。他のすべてのグループプロパティを提供する必要があります。最初のメッセージの ID を含めることができます。
      次で指定:
      インターフェース MessageGroupStoregetGroupMetadata 
      オーバーライド:
      クラス AbstractMessageGroupStoregetGroupMetadata 
      パラメーター:
      groupId - グループ ID。
      戻り値:
      メタデータ。
    • doRemoveMessagesFromGroup

      protected void doRemoveMessagesFromGroup(ObjectSE groupId, CollectionSE<Message<?>> messages)
      次で指定:
      クラス AbstractMessageGroupStoredoRemoveMessagesFromGroup 
    • getMessageFromGroup

      @Nullable public Message<?> getMessageFromGroup(ObjectSE groupId, UUIDSE messageId)
      インターフェースからコピーされた説明: MessageGroupStore
      ID を使用してグループから Message を取得します。メッセージがリクエストされたグループに属していない場合は、null を返します。
      次で指定:
      インターフェース MessageGroupStoregetMessageFromGroup 
      パラメーター:
      groupId - メッセージを含むグループの groupId。
      messageId - メッセージ ID。
      戻り値:
      リクエストされたグループに属している場合は、ID によるメッセージ。
    • doRemoveMessageFromGroupById

      protected boolean doRemoveMessageFromGroupById(ObjectSE groupId, UUIDSE messageId)
      オーバーライド:
      クラス AbstractMessageGroupStoredoRemoveMessageFromGroupById 
    • doRemoveMessageGroup

      protected void doRemoveMessageGroup(ObjectSE groupId)
      次で指定:
      クラス AbstractMessageGroupStoredoRemoveMessageGroup 
    • doCompleteGroup

      protected void doCompleteGroup(ObjectSE groupId)
      次で指定:
      クラス AbstractMessageGroupStoredoCompleteGroup 
    • doSetGroupCondition

      protected void doSetGroupCondition(ObjectSE groupId, StringSE condition)
      次で指定:
      クラス AbstractMessageGroupStoredoSetGroupCondition 
    • doSetLastReleasedSequenceNumberForGroup

      protected void doSetLastReleasedSequenceNumberForGroup(ObjectSE groupId, int sequenceNumber)
      次で指定:
      クラス AbstractMessageGroupStoredoSetLastReleasedSequenceNumberForGroup 
    • doPollMessageFromGroup

      protected Message<?> doPollMessageFromGroup(ObjectSE groupId)
      次で指定:
      クラス AbstractMessageGroupStoredoPollMessageFromGroup 
    • getOneMessageFromGroup

      public Message<?> getOneMessageFromGroup(ObjectSE groupId)
      インターフェースからコピーされた説明: MessageGroupStore
      MessageGroup から 1 つの Message を返します。
      次で指定:
      インターフェース MessageGroupStoregetOneMessageFromGroup 
      パラメーター:
      groupId - グループ識別子。
      戻り値:
      Message
    • getMessagesForGroup

      public CollectionSE<Message<?>> getMessagesForGroup(ObjectSE groupId)
      インターフェースからコピーされた説明: MessageGroupStore
      指定されたグループ ID のメッセージを取得します。
      次で指定:
      インターフェース MessageGroupStoregetMessagesForGroup 
      パラメーター:
      groupId - メッセージを取得するグループ ID。
      戻り値:
      グループのメッセージ。
    • streamMessagesForGroup

      public StreamSE<Message<?>> streamMessagesForGroup(ObjectSE groupId)
      インターフェースからコピーされた説明: MessageGroupStore
      指定されたグループに保存されているメッセージのストリームを返します。永続的な実装は、完全に処理されたら閉じる必要があるストリームを返します(たとえば、try-with-resources 句を使用)。デフォルトでは、MessageGroupStore.getMessagesForGroup(Object) の結果をストリーミングします。
      次で指定:
      インターフェース MessageGroupStorestreamMessagesForGroup 
      パラメーター:
      groupId - メッセージを取得するためのグループ ID。
      戻り値:
      このグループのメッセージの StreamSE
    • iterator

      public IteratorSE<MessageGroup> iterator()
      次で指定:
      インターフェース IterableSE<MessageGroup>iterator 
      次で指定:
      インターフェース MessageGroupStoreiterator 
      戻り値:
      現在累積されている MessageGroup の反復子。
    • getQuery

      protected StringSE getQuery(org.springframework.integration.jdbc.store.JdbcMessageStore.Query base)
      入力のパターンを置き換えて、有効な SQL クエリを生成します。この実装は、単純なマップベースのキャッシュを遅延して初期化し、名前付きクエリへの最初のアクセスでテーブルプレフィックスのみを置き換えます。さらに、アクセスはキャッシュから解決されます。
      パラメーター:
      base - 変換する SQL クエリ
      戻り値:
      置換を伴う変換されたクエリ
    • getJdbcOperations

      protected JdbcOperations getJdbcOperations()
      このクラスがサブクラス化されている場合に、JdbcOperations への参照を取得するために使用されます。
      戻り値:
      JdbcOperations の実装
    • doPollForMessage

      protected Message<?> doPollForMessage(StringSE groupIdKey)
      このメソッドは、DB への呼び出しを実行して、MessageGroup 内の最も古いメッセージを取得します。必要に応じて、このメソッドをオーバーライドします。たとえば、DB が FIRST などの高度な機能をサポートしている場合です。
      パラメーター:
      groupIdKey - メッセージグループ ID の文字列表現
      戻り値:
      メッセージ ; クエリがメッセージを生成しなかった場合は null になる可能性があります