This version is still in development and is not considered stable yet. For the latest stable version, please use Spring Integration 6.5.1!spring-doc.cn

Java DSL for JDBC Components

Version 7.0 introduced the Java DSL API for channel adapters in the JDBC module. The central Java DSL class (and usually starting point) is a org.springframework.integration.jdbc.dsl.Jdbc factory. It provides a self-explanatory method to initiate configuration for the target channel adapter or gateway. The standard IntegrationComponentSpec implementations for out-of-the-box channel adapters are:spring-doc.cn

  • JdbcInboundChannelAdapterSpec extends MessageSourceSpec<JdbcInboundChannelAdapterSpec, JdbcPollingChannelAdapter>spring-doc.cn

  • JdbcOutboundChannelAdapterSpec extends MessageHandlerSpec<JdbcOutboundChannelAdapterSpec, JdbcMessageHandler>spring-doc.cn

  • JdbcOutboundGatewaySpec extends MessageHandlerSpec<JdbcOutboundGatewaySpec, JdbcOutboundGateway>spring-doc.cn

  • JdbcStoredProcInboundChannelAdapterSpec extends MessageSourceSpec<JdbcStoredProcInboundChannelAdapterSpec, StoredProcPollingChannelAdapter>spring-doc.cn

  • JdbcStoredProcOutboundChannelAdapterSpec extends MessageHandlerSpec<JdbcStoredProcOutboundChannelAdapterSpec, StoredProcMessageHandler>spring-doc.cn

  • JdbcStoredProcOutboundGatewaySpec extends MessageHandlerSpec<JdbcStoredProcOutboundGatewaySpec, StoredProcOutboundGateway>spring-doc.cn

In addition, the StoredProcExecutorSpec, a convenient, builder-like component is provided for a StoredProcExecutor creation and configuration.spring-doc.cn

Here are some examples how Jdbc factory can be used for configuration an IntegrationFlow:spring-doc.cn

@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();
}

This Java DSL API can be used as is with the Kotlin and Groovy DSLs.spring-doc.cn