问题描述
我有一个@ConfigurationProperties
的配置类,如下所示。我可以在systemConfigMap
类的application.yaml中填充MyConfig
,如下所示
@ConfigurationProperties(prefix = "my-config")
@ConstructorBinding
@AllArgsConstructor
public class MyConfig {
/**
* A Configuration Map of multiple Systems
*/
private Map<String,SystemConfig> systemConfigMap;
}
主要类别为
@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
,我猜不能在payload-expression
的{{1}}中使用它,因为它里面有“-”。 / p>
如何为生成的bean spring integration http inbound gateway
指定bean名称?
编辑:HTTP网关配置
MyConfig
我想在请求 <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()"
/>
开始处理流程时加载systemConfigMap
的值。
解决方法
当您尝试在SpEL表达式中使用像my-config-a.b.c.config.MyConfig
这样的复杂bean id时,需要将其包装为文字。否则,它将直到第一个.
之前都知道一个id,该id被视为以前对可能的bean进行评估的方法/属性引用。
因此,它尝试找到像my-config-a
这样的bean,然后尝试访问其b
属性,在您的情况下这完全是错误的。
要解决您的问题,您需要这样做:
payload-expression="@'my-config-a.b.c.config.MyConfig'.systemConfigMap.values()"
另一种技巧是将MyConfig
注入到具有真正有意义的bean名称的bean中,并使用表达式中的那个作为委托。