@EnableConfigurationProperties(MyConfig.class) 生成的 bean 名称在 spring 集成中不起作用
@EnableConfigurationProperties(MyConfig.class) generated bean name does not work in spring-integration
我有一个 class 和 @ConfigurationProperties
的配置,如下所示。我可以在 MyConfig
class 中从 application.yaml 填充 systemConfigMap
,如下所示
@ConfigurationProperties(prefix = "my-config")
@ConstructorBinding
@AllArgsConstructor
public class MyConfig {
/**
* A Configuration Map of multiple Systems
*/
private Map<String, SystemConfig> systemConfigMap;
}
主要class作为
@EnableConfigurationProperties(MyConfig.class)
public class SpringApp {
public static void main(String[] args) {
SpringApplication.run(SpringApp.class, args);
}
}
问题是生成的 bean 名称是 my-config-a.b.c.config.MyConfig
,我无法在 spring integration http inbound gateway
上的 payload-expression
中使用它,我猜是因为它里面有“-” .
如何为生成的 bean 指定 bean 名称MyConfig
?
编辑:HTTP 网关配置
<int:channel id="myConfigListChannel" />
<int-http:inbound-gateway request-channel="myConfigListChannel"
path="/data"
error-channel="errorChannel"
supported-methods="GET"
payload-expression="@my-config-a.b.c.config.MyConfig.getSystemConfigMap().values()"
/>
我想在请求 /data
开始处理流程时加载 systemConfigMap
值。
当您尝试在 SpEL 表达式中使用像您的 my-config-a.b.c.config.MyConfig
这样的复杂 bean id 时,您需要将其包装到文字中。否则它理解一个 id 直到第一个 .
被视为 method/property 引用以评估之前可能的 bean 评估。
因此,它会尝试找到像 my-config-a
这样的 bean,然后尝试访问它的 b
属性,这在您的情况下是完全错误的。
要解决您的问题,您需要这样做:
payload-expression="@'my-config-a.b.c.config.MyConfig'.systemConfigMap.values()"
另一个技巧就像您 MyConfig
注入一些具有真正有意义的 bean 名称的 bean,并使用表达式中的那个作为委托。
我有一个 class 和 @ConfigurationProperties
的配置,如下所示。我可以在 MyConfig
class 中从 application.yaml 填充 systemConfigMap
,如下所示
@ConfigurationProperties(prefix = "my-config")
@ConstructorBinding
@AllArgsConstructor
public class MyConfig {
/**
* A Configuration Map of multiple Systems
*/
private Map<String, SystemConfig> systemConfigMap;
}
主要class作为
@EnableConfigurationProperties(MyConfig.class)
public class SpringApp {
public static void main(String[] args) {
SpringApplication.run(SpringApp.class, args);
}
}
问题是生成的 bean 名称是 my-config-a.b.c.config.MyConfig
,我无法在 spring integration http inbound gateway
上的 payload-expression
中使用它,我猜是因为它里面有“-” .
如何为生成的 bean 指定 bean 名称MyConfig
?
编辑:HTTP 网关配置
<int:channel id="myConfigListChannel" />
<int-http:inbound-gateway request-channel="myConfigListChannel"
path="/data"
error-channel="errorChannel"
supported-methods="GET"
payload-expression="@my-config-a.b.c.config.MyConfig.getSystemConfigMap().values()"
/>
我想在请求 /data
开始处理流程时加载 systemConfigMap
值。
当您尝试在 SpEL 表达式中使用像您的 my-config-a.b.c.config.MyConfig
这样的复杂 bean id 时,您需要将其包装到文字中。否则它理解一个 id 直到第一个 .
被视为 method/property 引用以评估之前可能的 bean 评估。
因此,它会尝试找到像 my-config-a
这样的 bean,然后尝试访问它的 b
属性,这在您的情况下是完全错误的。
要解决您的问题,您需要这样做:
payload-expression="@'my-config-a.b.c.config.MyConfig'.systemConfigMap.values()"
另一个技巧就像您 MyConfig
注入一些具有真正有意义的 bean 名称的 bean,并使用表达式中的那个作为委托。