Как установить местоположение файла в свойствах приложения - Spring boot - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть приложение Spring Boot, код должен получить доступ к файлу в папке resources / templates.Вот мой файл application.properties:

    pont.email.template.location=templates/mailTemplate.html

Это Java-файл, в котором я использую переменную:

    @Value("${pont.email.template.location}") 
    private String templateLocation;
    ----------------
    BufferedReader reader = new BufferedReader(new FileReader(templateLocation));

Проблема не в получении переменной, она возвращается правильно,проблема в том, что приложение не нашло ни одного файла по этому пути.

Я всегда получаю

    java.io.FileNotFoundException: templates/mailTemplate.html (No such file or directory)

Я проверил, что файл находится в пути ..

что не так в моем коде?Помогите пожалуйста, спасибо.

1 Ответ

1 голос
/ 08 апреля 2019

Вы не можете прочитать File изнутри JAR.Это терпит неудачу из-за того, что File должен указывать на фактический файловый ресурс в файловой системе, а не на что-то внутри JAR.

Пусть Spring выполнит тяжелый подъем и использует абстракцию Resource, чтобы скрыть неприятные внутренние органы.Поэтому вместо String используйте Resource и добавьте к значению свойства classpath:, чтобы убедиться, что оно загружено из пути к классам.Затем используйте InputStreamReader вместо FileReader для получения необходимой информации.

@Value("${pont.email.template.location}") 
private Resource templateLocation;
----------------
BufferedReader reader = new BufferedReader(new InputStreamReader(templateLocation.getInputStream()));

В вашем префиксе application.properties с classpath:.

pont.email.template.location=classpath:templates/mailTemplate.html

Теперь он должен работать независимо от среды, в которой вы работаете.

...