JDBC 组件的 Java DSL

7.0 版本引入了 JDBC 模块中通道适配器的 Java DSL API。核心 Java DSL 类(通常是起点)是一个 org.springframework.integration.jdbc.dsl.Jdbc 工厂。它提供了一个不言自明的方法来启动目标通道适配器或网关的配置。现成的通道适配器的标准 IntegrationComponentSpec 实现是

  • JdbcInboundChannelAdapterSpec 扩展 MessageSourceSpec<JdbcInboundChannelAdapterSpec, JdbcPollingChannelAdapter>

  • JdbcOutboundChannelAdapterSpec 扩展 MessageHandlerSpec<JdbcOutboundChannelAdapterSpec, JdbcMessageHandler>

  • JdbcOutboundGatewaySpec 扩展 MessageHandlerSpec<JdbcOutboundGatewaySpec, JdbcOutboundGateway>

  • JdbcStoredProcInboundChannelAdapterSpec 扩展 MessageSourceSpec<JdbcStoredProcInboundChannelAdapterSpec, StoredProcPollingChannelAdapter>

  • JdbcStoredProcOutboundChannelAdapterSpec 扩展 MessageHandlerSpec<JdbcStoredProcOutboundChannelAdapterSpec, StoredProcMessageHandler>

  • JdbcStoredProcOutboundGatewaySpec 扩展 MessageHandlerSpec<JdbcStoredProcOutboundGatewaySpec, StoredProcOutboundGateway>

此外,还提供了一个 StoredProcExecutorSpec,这是一个方便的、类似构建器的组件,用于 StoredProcExecutor 的创建和配置。

以下是一些如何使用 Jdbc 工厂配置 IntegrationFlow 的示例

@Bean
public DataSource h2DataSource() {
    return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .addScripts("classpath:dsl-h2.sql", "classpath:h2-stored-procedures.sql")
            .build();
}

@Bean
public IntegrationFlow outboundFlow(DataSource h2DataSource) {
    return flow -> flow
            .handle(Jdbc.outboundAdapter(h2DataSource,
                            "insert into outbound (id, status, name) values (1, 0, ?)")
                    .preparedStatementSetter((ps, requestMessage) ->
                            ps.setObject(1, requestMessage.getPayload()))
                    .usePayloadAsParameterSource(false)
                    .keysGenerated(false));
}

@Bean
public IntegrationFlow storedProcInboundFlow(DataSource h2DataSource) {
    return IntegrationFlow.from(Jdbc.storedProcInboundAdapter(h2DataSource)
                            .expectSingleResult(true)
                            .configurerStoredProcExecutor(configurer -> configurer
                                    .ignoreColumnMetaData(true)
                                    .isFunction(false)
                                    .storedProcedureName("GET_PRIME_NUMBERS")
                                    .procedureParameter(new ProcedureParameter("beginRange", 1, null))
                                    .procedureParameter(new ProcedureParameter("endRange", 10, null))
                                    .sqlParameter(new SqlParameter("beginRange", Types.INTEGER))
                                    .sqlParameter(new SqlParameter("endRange", Types.INTEGER))
                                    .returningResultSetRowMapper("out", new PrimeMapper())
                            ),
                    e -> e.poller(p -> p.trigger(new OnlyOnceTrigger())))
            .channel(c -> c.queue("storedProcInboundPollerChannel"))
            .get();
}

此 Java DSL API 可以与 KotlinGroovy DSL 结合使用。

© . This site is unofficial and not affiliated with VMware.