XML로 Poller에 초기 지연 설정하기 Tips

동작 확인 환경


  • Java 8
  • TERASOLUNA Server Framework for Java (5.4.1.RELEASE)
  • Spring Framwork 4.3.14.RELEASE
  • Spring Integration 4.3.14.RELEASE


  • XML로 Poller 정의



    Spring Integration에는 정기적으로 Poller를 실행하는 메커니즘이 있지만 XML (<int:poller>)로 정의 할 때 fixed-delayfixed-rate와 같은 실행 간격을 설정할 수있는 속성이 있습니다. 하지만 초기값 지연의 속성은 준비되어 있지 않습니다.

    다음은 4.3.x xsd 파일 Poller에 대한 설명입니다.

    spring-integration-4.3.xsd
    <xsd:element name="poller">
        <xsd:annotation>
            <xsd:documentation>
                Defines a top-level poller - 'org.springframework.integration.scheduling.PollerMetadata'.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="basePollerType">
                    <xsd:attribute name="id" type="xsd:string" />
                    <xsd:attribute name="default" type="xsd:boolean" default="false" />
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
    
    <xsd:complexType name="basePollerType">
        <xsd:annotation>
            <xsd:documentation>
                Defines the configuration metadata for a poller.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <!-- 略 -->
        </xsd:sequence>
        <xsd:attribute name="fixed-delay" type="xsd:string">
            <xsd:annotation>
                <xsd:documentation>Fixed delay trigger (in milliseconds).</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="ref" type="xsd:string" use="optional">
            <xsd:annotation>
                <xsd:documentation>
                    Allows this poller to reference another instance of a top-level poller.
                    [IMPORTANT] - This attribute is only allowed on inner poller definitions.
                    Defining this attribute on a top-level poller definition will result in a configuration exception.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="fixed-rate" type="xsd:string">
            <xsd:annotation>
                <xsd:documentation>Fixed rate trigger (in milliseconds).</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <!-- 略 -->
    </xsd:complexType>
    

    따라서 애플리케이션 시작 후 1분이 지나면 연결에 문제가 없거나 정기적으로 모니터링 메시지를 던지려는 사양을 충족할 수 없습니다.

    PeriodicTrigger로 해결



    그래서 조사한 결과 무려 2011년에 포럼에서 비슷한 질문을 하고 있던 분이 있었습니다.
  • initial delay for poller

  • 그 응답에 따르면, PeriodicTrigger 라는 정기적으로 실행하는 트리거 클래스에 초기 지연을 설정해, Pollertrigger 속성으로 설정하면 좋은 것 같습니다.
    따라서 다음과 같이 PeriodicTrigger를 빈 정의하고 Pollertrigger 속성으로 설정했는데, 애플리케이션 시작 후 60초가 경과한 후 60초 간격으로 감시 메시지가 던져지는 것을 확인 할 수 있었습니다.
    <!-- 監視メッセージを投げるアダプタ -->
    <int:inbound-channel-adapter id="monitoringAdapter"
        auto-startup="true" expression="'monitor'.bytes"
        channel="inboundMonitoringChannel">
        <int:poller trigger="monitoringTrigger" />
    </int:inbound-channel-adapter>
    
    <!-- 監視メッセージを投げる間隔 -->
    <!-- 初期遅延60秒後に60秒間隔で発火 -->
    <bean id="monitoringTrigger" class="org.springframework.scheduling.support.PeriodicTrigger"
        c:period="60" c:timeUnit="SECONDS" p:initialDelay="60" />
    

    결론


  • Poller
  • Task Executor
  • Trigger

  • 의 차이가 멍하니 되었습니다 .

    이번 샘플 코드는 GitHub에서 공개하고 있습니다 (내용은 조금 바꿨습니다 ).

    neriudon-TriggerSample-

    좋은 웹페이지 즐겨찾기