Jam*_*mes 8 spring properties-file java.nio.file spring-boot
我正在使用 Spring Boot 并具有以下组件类:
@Component
@ConfigurationProperties(prefix="file")
public class FileManager {
private Path localDirectory;
public void setLocalDirectory(File localDirectory) {
this.localDirectory = localDirectory.toPath();
}
...
}
Run Code Online (Sandbox Code Playgroud)
以及以下 yaml 属性文件:
file:
localDirectory: /var/data/test
Run Code Online (Sandbox Code Playgroud)
我想通过替换为 java.nio.file.Path 来删除 java.io.File(setLocalDirectory)的引用。但是,执行此操作时收到绑定错误。有没有办法将属性绑定到路径(例如,通过使用注释)?
我不知道是否有注释的方法,但您可以向您的应用程序添加一个转换器。将其标记为启用 @ComponentScan 的 @Component 有效,但您可能必须尝试将其正确注册到 ConversionService 否则。
@Component
public class PathConverter implements Converter<String,Path>{
@Override
public Path convert(String path) {
return Paths.get(path);
}
Run Code Online (Sandbox Code Playgroud)
当 Spring 看到您想要一个 Path 但它有一个 String(来自您的 application.properties)时,它会在其注册表中查找并发现它知道如何去做。
要添加到上面的 jst 答案中,Spring Boot 注释@ConfigurationPropertiesBinding可用于 Spring Boot 以识别用于属性绑定的转换器,如Properties Conversion下的文档中所述:
@Component
@ConfigurationPropertiesBinding
public class StringToPathConverter implements Converter<String, Path> {
@Override
public Path convert(String pathAsString) {
return Paths.get(pathAsString);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3849 次 |
| 最近记录: |