Come utilizzare il risultato SpEL come chiave @Value

Nov 20 2020

Nella mia applicazione springboot voglio usare @Value per leggere alcune configurazioni, ma questa configurazione è usata in molti altri metodi, quindi voglio definire la chiave di configurazione come costante. Questo è il codice:

@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");
    }
}

In questo codice variabile "SUPPORT_MANAGER_PLANE_INSTANCES" utilizzato da @Valuee processConfigureChangemetodo, se è necessario modificare il valore di questa variabile, è necessario modificare tutti i riferimenti a questa variabile, quindi voglio definire una variabile costante CONFIGURE_KEY @Valuee il processConfigureChangemetodo usa questa variabile.

Risposte

1 TongChen Nov 20 2020 at 14:16

Grazie all'aiuto di @ 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);
    }
}