2015-03-17 13 views
9
project.name=my-project 
base.url=http://localhost:8080 
cas.url=http://my-server:8010/cas 
cas.callback.url=${base.url}/${project.name} 

Fondamentalmente voglio utilizzare quanto sopra in un ConfigurationProperties spring-boot ma casCallbackUrl è sempre nullo.@ConfigurationProperties che fa riferimento a proprietà che fanno riferimento ad altre proprietà

@Component 
@ConfigurationProperties(prefix = "cas") 
@Getter 
@Setter 
public class CasSettings { 

    @NotBlank 
    private String url; //this is resolved correctly 

    @NotBlank 
    private String callbackUrl; //callbackUrl is null 

} 

aggiornamento

Beh ho ottenuto che funziona da camelCasing i nomi delle proprietà, ma secondo il documentation si dovrebbe essere in grado di usare la notazione del punto per nomi di proprietà.

da:

cas.callback.url=${base.url}/${project.name} 

a:

cas.callbackUrl=${base.url}/${project.name} 

Perché primavera-avvio non prendere in mano il notazione punto?

risposta

2

Il punto rappresenta un oggetto separato all'interno dell'oggetto proprietà di configurazione. cas.callback-url funzionerebbe.

0

La proprietà rilassata della molla non è rilassata per trasformare le proprietà del punto annotato in campi del cammello. Ma è possibile implementare facilmente da soli: oggetto

@Service 
@PropertySource("classpath:git.properties") 
public class MngmntService implements EnvironmentAware { 

    private BuildStatus buildStatus; 
    private static final Logger LOG = LoggerFactory.getLogger(MngmntService.class); 

    @Override 
    public void setEnvironment(Environment env) { 
     RelaxedPropertyResolver pr = new RelaxedPropertyResolver(env, "git."); 
     buildStatus = new BuildStatus(); 
     for (Field field : BuildStatus.class.getDeclaredFields()) { 
      String dotNotation = StringUtils.join(
       StringUtils.splitByCharacterTypeCamelCase(field.getName()), 
       '.' 
      ); 
      field.setAccessible(true); 
      try { 
       field.set(buildStatus, pr.getProperty(dotNotation, field.getType())); 
      } catch (IllegalArgumentException | IllegalAccessException ex) { 
       LOG.error("Error setting build property.", ex); 
      } 
     } 
    } 

    public BuildStatus getBuildStatus() { 
     return buildStatus; 
    } 

Proprietà:

public class BuildStatus implements Serializable { 

    private String tags; 
    private String branch; 
    private String dirty; 

    private String commitId; 
    private String commitIdAbbrev; 
    private String commitTime; 

    private String closestTagName; 

    private String buildTime; 
    private String buildHost; 
    private String buildVersion; 
    ... 
} 
Problemi correlati