Как преобразовать конфигурации db poller xml в конфигурации java, используя java dsl в Spring интеграции - PullRequest
1 голос
/ 09 июля 2020

Пытаюсь сделать опрос базы данных при весенней интеграции. У меня есть код XML, но я хочу преобразовать XML config в java DSL.

XML Код:

<context:component-scan
    base-package="org.springintegration.polling.dbpoller" />

<int:channel id="fromdb">
    <int:queue />
</int:channel>
<int:poller default="true" fixed-rate="5000" />
<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost/springboot" />
    <property name="username" value="root" />
    <property name="password" value="mh" />
</bean>
<int:service-activator input-channel="fromdb"
    ref="jdbcMessageHandler" />
<int-jdbc:inbound-channel-adapter
    channel="fromdb" data-source="dataSource" query="SELECT * FROM Items WHERE INVENTORY_STATUS = 0"
    update="UPDATE Items SET INVENTORY_STATUS = 1">
    <int:poller fixed-delay="4000" />
</int-jdbc:inbound-channel-adapter>

Я не Я хорошо разбираюсь в java DSL. Может кто подскажет как его конвертировать?

Спасибо

1 Ответ

1 голос
/ 09 июля 2020

Не существует JDB C -specifi c Java DSL-фабрик и построителей, но компонент, стоящий за <int-jdbc:inbound-channel-adapter>, может использоваться в определении IntegrationFlow. См. Это do c: https://docs.spring.io/spring-integration/docs/current/reference/html/overview.html#finding -class-names-for- java -and-dsl-configuration

Итак, класс Java для <int-jdbc:inbound-channel-adapter> здесь упоминается:

<xsd:element name="inbound-channel-adapter">
    <xsd:annotation>
        <xsd:documentation>
            Defines a Polling Channel Adapter for the
            'org.springframework.integration.jdbc.JdbcPollingChannelAdapter'
            for polling a database.
        </xsd:documentation>
    </xsd:annotation>

JdbcPollingChannelAdapter является реализацией MessageSource и поэтому может использоваться в Java DSL с этим заводским методом в IntegrationFlows:

/**
 * Populate the provided {@link MessageSource} object to the {@link IntegrationFlowBuilder} chain.
 * The {@link org.springframework.integration.dsl.IntegrationFlow} {@code startMessageSource}.
 * In addition use {@link SourcePollingChannelAdapterSpec} to provide options for the underlying
 * {@link org.springframework.integration.endpoint.SourcePollingChannelAdapter} endpoint.
 * @param messageSource the {@link MessageSource} to populate.
 * @param endpointConfigurer the {@link Consumer} to provide more options for the
 * {@link org.springframework.integration.config.SourcePollingChannelAdapterFactoryBean}.
 * @return new {@link IntegrationFlowBuilder}.
 * @see MessageSource
 * @see SourcePollingChannelAdapterSpec
 */
public static IntegrationFlowBuilder from(MessageSource<?> messageSource,
        @Nullable Consumer<SourcePollingChannelAdapterSpec> endpointConfigurer) {

poller можно настроить с помощью этого endpointConfigurer обратного вызова и через Pollers factory.

<int:service-activator> - это просто handle() в Java DSL, и нет причин указывать канал между вашим JdbcPollingChannelAdapter на фабрике from() и следующим .handle() в цепочке методов. Он просто вставлен туда естественно между ними, чтобы мы могли избежать шаблонного кода для прямых каналов.

...