Spring Integration a un mécanisme appelé Poller
qui s'exécute régulièrement, mais lors de sa définition en XML (<int: poller>
), l'intervalle d'exécution tel que délai fixe
ou taux fixe
est défini. Il existe des attributs qui peuvent être définis, mais il n'y a pas d'attribut pour le délai de valeur initiale.
Ce qui suit est une description du «Poller» dans le fichier xsd 4.3.x.
xml: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>
<!--Abréviation-->
</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>
<!--Abréviation-->
</xsd:complexType>
Par conséquent, par exemple, une minute après le démarrage de l'application, il n'est pas possible de respecter la spécification que vous souhaitez envoyer périodiquement un message de surveillance pour voir s'il y a un problème avec la connexion.
Periodic Trigger
Ainsi, à la suite de recherches, une personne a posé une question similaire sur le forum en 2011.
Selon la réponse, il semble que vous deviez définir le délai initial dans la classe de déclenchement exécutée périodiquement appelée PeriodicTrigger
et le définir dans l'attribut trigger
de Poller
.
Ainsi, lorsque j'ai défini PeriodicTrigger
comme un bean et l'ai réglé sur l'attribut trigger
de Poller
comme indiqué ci-dessous, j'ai confirmé qu'un message de surveillance était émis toutes les 60 secondes après 60 secondes écoulées depuis le démarrage de l'application. C'est fait.
<!--Adaptateur qui émet des messages de surveillance-->
<int:inbound-channel-adapter id="monitoringAdapter"
auto-startup="true" expression="'monitor'.bytes"
channel="inboundMonitoringChannel">
<int:poller trigger="monitoringTrigger" />
</int:inbound-channel-adapter>
<!--Intervalle de diffusion des messages de surveillance-->
<!--Se déclenche à intervalles de 60 secondes après un délai initial de 60 secondes-->
<bean id="monitoringTrigger" class="org.springframework.scheduling.support.PeriodicTrigger"
c:period="60" c:timeUnit="SECONDS" p:initialDelay="60" />
La différence entre devient vague: rolling_eyes:.
Cet exemple de code est disponible sur GitHub (j'ai un peu changé le contenu: suer :).
Recommended Posts