Spring @Value中的云配置和SpEL

Spring @Value中的云配置和SpEL,spring,spring-boot,Spring,Spring Boot,我遇到了一个问题,我尝试侦听EnvironmentChangeEvent并重新初始化一些配置 虽然我发现带有SpEL的@Value注释不起作用,但是普通的@Value注释是可以的: @Component public class ConsumeService { @Autowired ConsumeConfig consumeConfig; @EventListener(EnvironmentChangeEvent.class) void onEnvChange()

我遇到了一个问题,我尝试侦听EnvironmentChangeEvent并重新初始化一些配置

虽然我发现带有SpEL的@Value注释不起作用,但是普通的@Value注释是可以的:

@Component
public class ConsumeService {

    @Autowired
    ConsumeConfig consumeConfig;

 @EventListener(EnvironmentChangeEvent.class)
    void onEnvChange() {
     log.debug("{}",consumeConfig);

//when i print here, i get only consumeDesc, but cardList is an empty List.
    }
}



@Configuration
@RefreshScope
public class ConsumeConfig {

    @Value("${consume.desc}")
    private String consumeDesc;

    @Value("#{'${api.server.round.card}'.split(',')}")
    private List<String> cardList;
}
@组件
公共类消费服务{
@自动连线
ConsumeConfig ConsumeConfig;
@EventListener(EnvironmentChangeEvent.class)
void onEnvChange(){
log.debug(“{}”,consumeConfig);
//当我在这里打印时,我只得到consumeDesc,但cardList是一个空列表。
}
}
@配置
@刷新范围
公共类ConsumeConfig{
@值(${consume.desc}”)
私有字符串consumerdesc;
@值(“#{${api.server.round.card}.split(',')}”)
私人名单;
}
问题:


这个问题是否与SpEL的生命周期有关?似乎SpEL的值尚未解析。

拆分应该返回字符串数组,而不是列表。试试这个:

@Value("#{'${api.server.round.card}'.split(',')}")
private String[] cardList;

你说“SpEL的@Value注释不起作用”是什么意思?您得到的是异常、空列表还是空列表?请在这里提供您试图解析的
api.server.round.card
确切值。这里一定是出了问题。SpEL可以处理列表或数组。当我的意思是不工作时,我得到了一个空列表。我在github项目存储库中发布了一个问题,得到了答案:不支持SpEL。