project.name=my-project
base.url=http://localhost:8080
cas.url=http://my-server:8010/cas
cas.callback.url=${base.url}/${project.name}
基本上我想在spring-boot ConfigurationProperties中使用上面的内容,但casCallbackUrl总是为null。
@Component
@ConfigurationProperties(prefix = "cas")
@Getter
@Setter
public class CasSettings {
@NotBlank
private String url; //this is resolved correctly
@NotBlank
private String callbackUrl; //callbackUrl is null
}
更新
嗯,我通过camelCasing属性名称来实现它,但是根据documentation,您应该能够使用点表示法来表示属性名称。
从:
cas.callback.url=${base.url}/${project.name}
为:
cas.callbackUrl=${base.url}/${project.name}
为什么spring-boot没有采用点符号?
答案 0 :(得分:2)
点表示配置属性对象中的单独对象。 cas.callback-url
会奏效。
答案 1 :(得分:0)
春天放松的属性并不轻松将点标记属性转换为驼峰案例字段。但你可以轻松地自己实现它:
@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;
}
属性对象:
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;
...
}