Spring boot将Java注释上的配置属性/消息外部化
是否有一种方法可以在spring中从外部属性文件中读取文本,而无需使用Spring boot将Java注释上的配置属性/消息外部化,java,spring,properties,spring-boot,annotations,Java,Spring,Properties,Spring Boot,Annotations,是否有一种方法可以在spring中从外部属性文件中读取文本,而无需使用@Value注释。例如:application.properties var.foo="hello" 我可以使用 @Value("${var.foo}") String value; 作为类变量。是否有一种方法可以在不使用@Value注释的情况下包含此属性。类似于JSRBean验证的功能 @NotNull(message={custom.notnull}) 您可以在ValidationMessages.propertie
@Value
注释。例如:application.properties
var.foo="hello"
我可以使用
@Value("${var.foo}") String value;
作为类变量。是否有一种方法可以在不使用@Value
注释的情况下包含此属性。类似于JSRBean验证的功能
@NotNull(message={custom.notnull})
您可以在ValidationMessages.properties文件中将此属性值外部化
例如,如果我有一个资源(web组件)类,并且如果我必须使用Swagger注释来记录它们
@controller
@path("/")
@Api(description = "User Resource API")
public class UserResource {
@Path("/users")
@GET
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "returns user details", notes = "some notes")
public User getUser() {
return new User(123, "Joe", "Montana");
}
}
模型呢,
@ApiModel("user model")
public class User {
@ApiModelProperty(value = "This represents user id")
private String id;
private String firstName;
private String lastName;
...
}
如何将此字符串/句子/消息外部化为外部属性文件。我认为这适用于一般的Java注释和spring,而不是特定于Swagger。我指定Swagger的原因是,就像hibernate验证一样,Java库可以选择在外部ValidationMessages.properties文件中指定这些消息,并且spring默认知道如何获取(或者可以进行配置)
斯威格提供了这样的选择吗?如果没有,如何设置
潜在的问题是,我不想让我的代码/逻辑与文档相关的数据(元数据)混杂在一起。我不认为你能做到这一点,除非你正在使用的注释的底层实现都有自己的i18n标准(比如
ValidationMessages.properties
),或支持Spring的MessageSource
对于后一种选择,您只需在messages.properties
文件中添加键/值对,然后让框架完成其余工作:
消息.属性
my.validation.error.message=出现严重错误!
SomeClass.java
@MySpringCompatibleValidationAnnotation("my.validation.error.message")
private String someVariable;
底线是,根据您尝试使用的框架,它可能支持也可能不支持开箱即用
现在,就斯威格而言,i18n对文档的支持是作为一项新功能提出的,但在他们进一步考虑如何实现时,它被关闭或搁置。有关更多详细信息,请参阅。使用@Value(${property}”)
注释来注入配置属性有时会很麻烦,因此spring boot引入了@ConfigurationProperties
,这应该是您想要的解决方案
是引用文档。在配置文件中声明bean时,可以使用占位符。这里可以尝试一个示例:
如果您使用的是Spring Boot,则可以尝试此方法,而无需进行任何特殊配置
@environment.getProperty('property')
您需要提供有关用例的更多详细信息,以了解为什么不能或不想使用
@Value
注释。Spring围绕i18n支持的另一个领域是使用messages.properties允许某些领域使用特定语言的text.hi@shawn.替换令牌。。谢谢你的回复。让我编辑这个问题谢谢托马斯的回答。。我觉得没有将各种注释属性的值外部化的大摇大摆的注释会给代码(模型、资源…)带来太多的混乱。