我可以将这些值添加到我的配置文件中:
server:
tomcat:
max-http-post-size: 1024MB这有一个很大的好处,那就是我可以用一个很容易读懂的带单位的数字来代替编写100000000000。但是,如果我想使用它作为我自己的配置值呢?
例如,这不起作用:
@Value("${server.tomcat.max-http-post-size}")
private Integer maxPostSize;因为它会产生:
Caused by: java.lang.NumberFormatException: For input string: "1024MB"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:na]
at java.base/java.lang.Integer.parseInt(Integer.java:652) ~[na:na]
at java.base/java.lang.Integer.valueOf(Integer.java:983) ~[na:na]
at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:211) ~[spring-core-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
... 32 common frames omitted我在Spring Boot 2.1.6上尝试过。我知道如何使用自己的代码或某个库将像1024MB这样的字符串转换为数字,但我希望使用Spring Boot方法。
发布于 2019-07-15 22:00:09
简而言之,它不是这样的。
示例属性
server:
tomcat:
max-http-post-size: 1024MB在内部处理,并将实际映射到代码中的字符串。然后对该字符串进行解析,并相应地将其映射为一个长整型。
因此,如果你想实现类似的东西,你通常必须做类似的事情。另一种常见的模式是在名称中包含度量单位的属性。例如:
server.tomcat.max-http-post-size-mb: 1024这使得它很明确,尽管你失去了灵活性。
编辑:
只要快速阅读一下,就会发现如果您更新到最新版本的spring (来自5.1+),则有一个名为DataSize的类,它实际上应该允许您将这样的字符串映射到另一个类。
如果您升级了spring版本,您应该能够声明此类型的类并添加@Value
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/unit/DataSize.html
https://stackoverflow.com/questions/57041225
复制相似问题