此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
用于 JDBC 组件的 Java DSL
V7.0 在 JDBC 模块中引入了用于通道适配器的 Java DSL API。
中央 Java DSL 类(通常是起点)是一个org.springframework.integration.jdbc.dsl.Jdbc
厂。
它提供了一种不言自明的方法来启动目标通道适配器或网关的配置。
标准IntegrationComponentSpec
开箱即用通道适配器的实现包括:
-
JdbcInboundChannelAdapterSpec extends MessageSourceSpec<JdbcInboundChannelAdapterSpec, JdbcPollingChannelAdapter>
-
JdbcOutboundChannelAdapterSpec extends MessageHandlerSpec<JdbcOutboundChannelAdapterSpec, JdbcMessageHandler>
-
JdbcOutboundGatewaySpec extends MessageHandlerSpec<JdbcOutboundGatewaySpec, JdbcOutboundGateway>
-
JdbcStoredProcInboundChannelAdapterSpec extends MessageSourceSpec<JdbcStoredProcInboundChannelAdapterSpec, StoredProcPollingChannelAdapter>
-
JdbcStoredProcOutboundChannelAdapterSpec extends MessageHandlerSpec<JdbcStoredProcOutboundChannelAdapterSpec, StoredProcMessageHandler>
-
JdbcStoredProcOutboundGatewaySpec extends MessageHandlerSpec<JdbcStoredProcOutboundGatewaySpec, StoredProcOutboundGateway>
此外,StoredProcExecutorSpec
,则为一个方便的、类似构建器的组件StoredProcExecutor
创建和配置。
以下是一些示例如何Jdbc
factory 可用于配置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();
}