0

我有一个配置类,@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-expressionon中使用spring integration http inbound gateway它,我猜是因为它里面有“-”。

如何为生成的 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()"
    />

我想在请求开始处理流程systemConfigMap时加载这些值。/data

4

1 回答 1

1

当您尝试my-config-a.b.c.config.MyConfig在 SpEL 表达式中使用像您这样的复杂 bean id 时,您需要将其包装到文字中。否则,它会理解一个 id,直到第一个.被视为方法/属性引用来评估之前可能的 bean 评估。因此,它会尝试找到类似的 bean my-config-a,然后尝试访问其b属性,这在您的情况下是完全错误的。

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

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

另一个技巧就像你MyConfig注入一些具有真正有意义的 bean 名称的 bean 并将表达式中的那个用作委托。

于 2020-08-26T20:11:38.207 回答