Jak używać wyniku SpEL jako klucza @Value

Nov 20 2020

W mojej aplikacji springboot chcę użyć @Value do odczytania niektórych konfiguracji, ale ta konfiguracja jest używana w wielu innych metodach, więc chcę zdefiniować klucz konfiguracji jako stałą.To jest kod:

@Component
public class InstanceConfig {

    private static final String CONFIGURE_KEY = "SUPPORT_MANAGER_PLANE_INSTANCES";

    @Value("${SUPPORT_MANAGER_PLANE_INSTANCES}")
    private String supportManageInstances;
    
    @ApolloConfigChangeListener(value = ConfigConsts.NAMESPACE_APPLICATION)
    public void processConfigureChange(ConfigChangeEvent event) {
        log.info("configure changed do somthing");
        ConfigChange configChange = event.getChange("SUPPORT_MANAGER_PLANE_INSTANCES");
    }
}

W tej zmiennej kodu „SUPPORT_MANAGER_PLANE_INSTANCES” używanej przez @Valuei processConfigureChangemetody, jeśli trzeba zmodyfikować wartość tej zmiennej, potrzebuję zmodyfikować wszystkie odwołać się do tej zmiennej, więc chcę zdefiniować jedną stałą zmienną CONFIGURE_KEY @Valuei processConfigureChangemetodę używaj tej zmiennej.

Odpowiedzi

1 TongChen Nov 20 2020 at 14:16

Dzięki pomocy @ hirarqi

@Component
public class InstanceConfig {

    private static final String CONFIGURE_KEY = "SUPPORT_MANAGER_PLANE_INSTANCES";

    @Value("${" + CONFIGURE_KEY + "}")
    private String supportManageInstances;
    
    @ApolloConfigChangeListener(value = ConfigConsts.NAMESPACE_APPLICATION)
    public void processConfigureChange(ConfigChangeEvent event) {
        log.info("configure changed do somthing");
        ConfigChange configChange = event.getChange(CONFIGURE_KEY);
    }
}