如何使用 @ConfigurationProperties 注入 java.nio.file.Path 依赖项
Posted
技术标签:
【中文标题】如何使用 @ConfigurationProperties 注入 java.nio.file.Path 依赖项【英文标题】:How to inject java.nio.file.Path dependency using @ConfigurationProperties 【发布时间】:2015-09-12 12:37:37 【问题描述】:我正在使用 Spring Boot,并且有以下 Component 类:
@Component
@ConfigurationProperties(prefix="file")
public class FileManager
private Path localDirectory;
public void setLocalDirectory(File localDirectory)
this.localDirectory = localDirectory.toPath();
...
还有以下yaml属性文件:
file:
localDirectory: /var/data/test
我想通过替换为 java.nio.file.Path 来删除 java.io.File (of setLocalDirectory) 的引用。但是,执行此操作时会收到绑定错误。有没有办法将属性绑定到路径(例如通过使用注释)?
【问题讨论】:
【参考方案1】:要添加到上面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);
【讨论】:
【参考方案2】:我不知道是否有注释方法,但您可以将转换器添加到您的应用程序。将其标记为启用了 @ComponentScan 的 @Component 是可行的,但您可能不得不尝试将其正确注册到 ConversionService 中。
@Component
public class PathConverter implements Converter<String,Path>
@Override
public Path convert(String path)
return Paths.get(path);
当 Spring 看到你想要一个 Path 但它有一个 String(来自你的 application.properties)时,它会在它的注册表中查找并发现它知道如何去做。
【讨论】:
我把它放到了一个@Configuration 类中,并把Converter我接受了 james 的想法,并在 spring boot 配置中定义了转换器:
@SpringBootConfiguration
public class Configuration
public class PathConverter implements Converter<String, Path>
@Override
public Path convert(String path)
return Paths.get(path);
@Bean
@ConfigurationPropertiesBinding
public PathConverter getStringToPathConverter()
return new PathConverter();
【讨论】:
以上是关于如何使用 @ConfigurationProperties 注入 java.nio.file.Path 依赖项的主要内容,如果未能解决你的问题,请参考以下文章