Nano Hash - криптовалюты, майнинг, программирование

Как использовать свойство-заполнитель для файла в файловой системе

Раньше у нас был способ загрузки свойств из файла по пути к классам:

<context:property-placeholder location="classpath:myConfigFile.properties" />

и это сработало отлично. Но теперь мы хотим загрузить свойства из определенного файла в системе, которого нет в пути к классам. Мы хотели иметь возможность динамически загружать файл, поэтому мы используем переменную среды Java для его заполнения. Ниже я приведу простой пример:

В Java:

  System.setProperty("my.prop.file", "/path/to/myConfigFile.properties");

В Spring XML:

<context:property-placeholder location="${my.prop.file}" />

Я также пробовал это таким образом, благодаря идее Лучано:

<context:property-placeholder properties-ref="prop" />

<util:properties id="prop" location="reso"/>

<bean id="reso" class="org.springframework.core.io.FileSystemResource">
    <constructor-arg index="0" value="${my.prop.file}" />
</bean>

Все, что я пробовал, потерпело неудачу. Независимо от того, что я установил для my.prop.file. Лучшие хиты включают:

<context:property-placeholder location="/path/to/myConfigFile.properties" />
(ClassNotFoundException: .path.to.myConfigFile.properties)

<context:property-placeholder location="file:/path/to/myConfigFile.properties" />
(ClassNotFoundException: file:.path.to.myConfigFile.properties)

<context:property-placeholder location="file:///path/to/myConfigFile.properties" />
(ClassNotFoundException: file:...path.to.myConfigFile.properties)

Как вы используете заполнители свойств с местоположением, которое находится в файловой системе, а НЕ в пути к классам? Мы используем Spring 3.0.5.

Оказывается, возникла проблема со сценарием, запускающим программу Java, которая загружает файл Spring. Спасибо за помощь. Я собираюсь попросить удалить этот вопрос, так как исходный код все-таки работает. Спасибо за помощь.

10.05.2012

  • Кстати, категорически не согласен с тем, что это закрыто. 27.02.2015
  • С закрытием тоже не согласен. Я пришел сюда после некоторого поиска в Google, и он описывает точный вопрос, который у меня есть... 08.06.2016
  • Я тоже - я не понимаю, почему это было закрыто со слишком локализованной категорией? Мне это кажется довольно общим? 03.10.2016
  • Вы всегда можете щелкнуть повторно открыть, чтобы проголосовать за повторное открытие вопроса. 05.09.2017

Ответы:


1

Как насчет этого пути?

<context:property-placeholder properties-ref="prop" />

<util:properties id="prop" location="reso"/>

<bean id="reso" class="org.springframework.core.io.FileSystemResource">
    <constructor-arg index="0" value="/yourpathandfile" />
</bean>
10.05.2012
  • Могу ли я указать переменную среды Java для значения =/ваш путь и файл? Я попробую. Спасибо 11.05.2012
  • Это не работает. Свойство передается, но происходят те же ошибки. Тем не менее, спасибо за вашу помощь. Разве это невозможно? 11.05.2012
  • что, если вы жестко закодируете ${my.prop.file} с реальным путем, просто чтобы посмотреть, работает ли это? 11.05.2012
  • Разве это не должно быть properties-ref=my.prop.file? Или я неправильно понимаю? Я не понимаю, что такое prop в этом контексте. 14.04.2016
  • @Marvo prop — это идентификатор, определенный во второй строке, где указано util:properties. 14.04.2016

  • 2

    Это сработало для меня:

    <context:property-placeholder location="file:/path/to/myConfigFile.properties" />
    

    Но это (интересно) не сделал:

    <context:property-placeholder location="#{ systemProperties['foo'] }" />
    

    я получил

    java.io.FileNotFoundException: Could not open ServletContext resource [/#{ systemProperties['foo'] }]
    

    Вы не сможете использовать заполнитель свойства ${..} с определением PropertyPlaceholderConfigurer. Это курица перед яйцом.

    Вы всегда можете создать подкласс PropertyPlaceholderConfigurer и заставить его делать все, что вы хотите (например, вызывать setLocations() в методе @PostConstruct. Затем вместо использования <context:property-placeholder> используйте:

    <bean class="com.foo.MyPropertyPlaceholderConfigurer"/>
    
    11.05.2012
  • Я думал, что язык выражений допускает это, как утверждается в эта статья об управлении файлами свойств с помощью spring. Я попытаюсь понять, что нужно создать в PropertyPlaceholderConfigurer подклассом, чтобы он мог понять, как динамически загружать файл свойств. Это казалось такой простой идеей, и теперь она кажется такой запутанной со Spring. 11.05.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..