@EnableConfigurationProperties(MyConfig.class)生成的bean名称在spri



我有一个带有@ConfigurationProperties的配置类,如下所示。我能够在MyConfig类中从application.yaml填充systemConfigMap,如下所示

@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,我不能在spring integration http inbound gateway上的payload-expression中使用它,我想因为它有"-">

如何为生成的beanMyConfig指定bean名称?

编辑: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,直到第一个.,它被视为方法/属性引用,以便在之前对可能的bean求值。因此,它试图找到一个类似my-config-a的bean,然后尝试访问其b属性,在您的情况下,这是完全错误的。

要解决你的问题,你需要这样做:

payload-expression="@'my-config-a.b.c.config.MyConfig'.systemConfigMap.values()"

另一个技巧是将MyConfig注入到具有真正有意义的bean名称的bean中,并将表达式中的名称用作委托。

最新更新