File.separator в @PropertySource

Я хотел бы включить '/' или '\' в путь в моей аннотации @PropertySource, чтобы он работал под Linux или Windows.

я пытался

@PropertySource("${dir} + #{T(File).separator} + "${name}")

и ряд вариаций, но безуспешно.

Как я могу включить в свой @PropertySource символ разделителя пути к файлу, не зависящий от платформы?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
558
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы правы, странно, как эта проблема может относиться к множеству людей (например, среда разработки Windows или среда prod Unix и т. д.).

Естественным ответом будет то, что вы просто поместите правую завершающую «косую черту» в конце фактического свойства dir в том же формате, что и тип пути к файлу для конкретной ОС. Иначе...

Вот решение, предполагая, что вам предоставлен ${dir} в собственном формате файловой системы среды ОС и путь к файлу name, вы можете сделать:

@PropertySource(name = "theFileInDir.properties",value = { "file:${dir}" }, factory = OSAgnosticPropertySourceFactory.class) 

Затем вы должны создать PropertySourceFactory для элемента аннотации @PropertySource#factory следующим образом:

public class OSAgnosticPropertySourceFactory implements PropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        Path resolvedFilePath = Paths.get(resource.getResource().getURI()).resolve(name);
        EncodedResource er = new EncodedResource(new PathResource(resolvedFilePath), resource.getCharset());
        return (name != null ? new ResourcePropertySource(name, er) : new ResourcePropertySource(er));
    }

}

Мне нравится мое решение, потому что вы можете использовать основные элементы (например, элементы name, value и factory) в самой аннотации @PropertySource для определения местоположения файла, не зависящего от ОС, с помощью Java 7 Path.

Вы можете сделать больше с PropertySourceFactory, но я думаю, что вам этого должно хватить. Я бы хотел увидеть другие ответы на этот вопрос; Я сам столкнулся с этой проблемой, поэтому я рад, что вы заставили меня задуматься о том, как ее решить!

Другие вопросы по теме