全局属性

通过在 classpath 中提供一个 properties 文件,可以覆盖某些全局框架属性。

默认属性可在 org.springframework.integration.context.IntegrationProperties 类中找到。以下列表显示了默认值:

spring.integration.channels.autoCreate=true (1)
spring.integration.channels.maxUnicastSubscribers=0x7fffffff (2)
spring.integration.channels.maxBroadcastSubscribers=0x7fffffff (3)
spring.integration.taskScheduler.poolSize=10 (4)
spring.integration.messagingTemplate.throwExceptionOnLateReply=false (5)
spring.integration.readOnly.headers= (6)
spring.integration.endpoints.noAutoStartup= (7)
spring.integration.channels.error.requireSubscribers=true (8)
spring.integration.channels.error.ignoreFailures=true (9)
spring.integration.endpoints.defaultTimeout=30000 (10)
1 当设置为 true 时,如果应用上下文中未明确找到 input-channel 实例,则会自动将其声明为 DirectChannel 实例。
2 设置例如 DirectChannel 上允许的默认订阅者数量。这可以用于避免不经意间将多个端点订阅到同一个通道。您可以通过设置 max-subscribers 属性来覆盖单个通道上的此设置。
3 此属性提供例如 PublishSubscribeChannel 上允许的默认订阅者数量。这可以用于避免不经意间将多于预期数量的端点订阅到同一个通道。您可以通过设置 max-subscribers 属性来覆盖单个通道上的此设置。
4 默认 taskScheduler bean 中可用的线程数。请参阅 配置 Task Scheduler
5 当设置为 true 时,到达网关回复通道的消息会在网关不期望回复时(因为发送线程已超时或已收到回复)抛出异常。
6 这是一个逗号分隔的消息头名称列表,在头复制操作期间不应填充到 Message 实例中。此列表由 DefaultMessageBuilderFactory bean 使用,并传播到通过 MessageBuilder (请参阅 MessageBuilder 帮助类) 构建消息时使用的 IntegrationMessageHeaderAccessor 实例 (请参阅 MessageHeaderAccessor API)。默认情况下,在消息构建期间仅 MessageHeaders.IDMessageHeaders.TIMESTAMP 不被复制。自 4.3.2 版本起。
7 这是一个逗号分隔的 AbstractEndpoint bean 名称模式列表(xxx*, xxx, *xxxxxx*yyy),这些端点不应在应用启动期间自动启动。您稍后可以通过 Control Bus 按其 bean 名称手动启动这些端点,通过 SmartLifecycleRoleController 按其角色启动 (请参阅 端点角色),或者通过 Lifecycle bean 注入启动。您可以通过指定 auto-startup XML 注解或 autoStartup 注解属性,或在 bean 定义中调用 AbstractEndpoint.setAutoStartup() 来明确覆盖此全局属性的效果。自 4.3.12 版本起。
8 一个布尔标志,指示默认全局 errorChannel 是否必须配置 requireSubscribers 选项。自 5.4.3 版本起。更多信息请参阅 错误处理
9 一个布尔标志,指示默认全局 errorChannel 是否必须忽略分派错误并将消息传递给下一个处理器。自 5.5 版本起。
10 端点中请求和回复超时的默认毫秒数。默认值为 30 秒,以避免无限期阻塞。可以配置为负值以恢复端点的无限期阻塞行为。自 6.2 版本起。

可以通过向 classpath 添加 /META-INF/spring.integration.properties 文件或为 org.springframework.integration.context.IntegrationProperties 实例提供一个名为 IntegrationContextUtils.INTEGRATION_GLOBAL_PROPERTIES_BEAN_NAME 的 bean 来覆盖这些属性。您无需提供所有属性 — 只需提供您想要覆盖的属性即可。

自 5.1 版本起,当 org.springframework.integration 类别的日志级别设置为 DEBUG 时,所有合并后的全局属性会在应用上下文启动后打印到日志中。输出如下所示:

Spring Integration global properties:

spring.integration.endpoints.noAutoStartup=fooService*
spring.integration.taskScheduler.poolSize=20
spring.integration.channels.maxUnicastSubscribers=0x7fffffff
spring.integration.channels.autoCreate=true
spring.integration.channels.maxBroadcastSubscribers=0x7fffffff
spring.integration.readOnly.headers=
spring.integration.messagingTemplate.throwExceptionOnLateReply=true
spring.integration.endpoints.defaultTimeout=30000