我可以将这些值添加到我的配置文件中:
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 Boots的方式。
答案 0 :(得分:3)
答案很简单,那就不是。
示例属性
server:
tomcat:
max-http-post-size: 1024MB
是内部处理的,实际上将映射到代码中的String。然后,将字符串解析并适当地映射到long / integer。
因此,如果您想实现类似的功能,则通常必须执行类似的操作。另一个常见的模式是拥有一个名称中带有度量单位的属性。例如:
server.tomcat.max-http-post-size-mb: 1024
这使它很明确,尽管您失去了灵活性。
编辑:
快速阅读一下,结果发现,如果您将Spring更新到最新版本(从5.1+开始),则有一个名为DataSize的类,它实际上应该允许您将类似的字符串映射到另一个类。 / p>
如果升级spring版本,则应该可以声明该类型的类并添加@Value
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/unit/DataSize.html