2015-06-25 4 views
2

Я использую Spring бутс и имеет следующий класс компонентов:Как придать java.nio.File.Path зависимости с помощью @ConfiugrationProperties

@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.io.File (из setLocalDirectory), заменив ее на java.nio.file.Path. Тем не менее, я получаю ошибку привязки, когда я это делаю. Есть ли способ привязать свойство к пути (например, используя аннотации)?

ответ

2

Я не знаю, есть ли способ с аннотациями, но вы можете добавить конвертер в свое приложение. Отметьте его как @Component с включенными функциями @ComponentScan, но вам, возможно, придется поиграть с тем, чтобы он был правильно зарегистрирован в ConversionService.

@Component 
public class PathConverter implements Converter<String,Path>{ 

@Override 
public Path convert(String path) { 
    return Paths.get(path); 
} 

Когда весна видит, что вы хотите путь, но он имеет String (от ваших application.properties), он будет искать в реестре и найти его знает, как это сделать.

+0

Я положил это в класс @Configuration и сделал конвертер bean (@Bean). Это позаботилось о регистрации с помощью [Spring Boot] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration) – James