@ConfigurationProperties 引用本身引用其他属性的属性
@ConfigurationProperties referencing properties that themselves reference other properties
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
}
更新
好吧,我通过 属性 名称的驼峰式拼接得到它的工作,但根据 documentation 你应该能够对 属性 名称使用点符号。
来自:
cas.callback.url=${base.url}/${project.name}
至:
cas.callbackUrl=${base.url}/${project.name}
为什么 spring-boot 没有选择点符号?
圆点表示配置属性对象中的一个单独对象。 cas.callback-url
会起作用。
Spring 宽松 属性 不够宽松,无法将点标记属性转换为驼峰式字段。但是你可以很容易地自己实现它:
@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;
...
}
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
}
更新
好吧,我通过 属性 名称的驼峰式拼接得到它的工作,但根据 documentation 你应该能够对 属性 名称使用点符号。
来自:
cas.callback.url=${base.url}/${project.name}
至:
cas.callbackUrl=${base.url}/${project.name}
为什么 spring-boot 没有选择点符号?
圆点表示配置属性对象中的一个单独对象。 cas.callback-url
会起作用。
Spring 宽松 属性 不够宽松,无法将点标记属性转换为驼峰式字段。但是你可以很容易地自己实现它:
@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;
...
}