Указание пути к индексу с помощью Hibernate Search и Spring

У меня проблема с установкой правильного пути для моего файла index. Было бы здорово, если бы это было внутри моего весеннего приложения, так как, я думаю, оно будет работать даже после того, как я разверну свое приложение в Cloudbees.

Это мой объект, который я пытаюсь проиндексировать:

@Entity
@Table(name="educations")
@Indexed(index="educations")
public class Education {

У меня есть следующее в servlet-context.xml:

<resources mapping="/resources/**" location="/resources/"/>

Я указываю путь к индексу Lucene следующим образом:

Properties props = new Properties();
props.put("hibernate.search.default.indexBase", "resources/lucene/indexes");
entityManagerFactory.setJpaProperties(props);

Что не дает мне никакой ошибки, но я также не могу найти папку, которую я не понимаю. Я попытался найти его.

Я также пробовал:

props.put("hibernate.search.default.indexBase", "classpath:/lucene/indexes");

и

props.put("hibernate.search.default.indexBase", "/resources/lucene/indexes");

Но до сих пор не могу найти папку. Однако через некоторое время борьбы с этим я пытаюсь поместить его в свой домашний каталог. (что может вызвать у меня проблемы позже при развертывании в облаке):

props.put("hibernate.search.default.indexBase", "/lucene/indexes");

я получаю следующее

Cannot write into index directory: /lucene/indexes for index educations

Поэтому я предполагаю, что это ошибка разрешения. Я пробую следующее в терминале (OSX):

sudo chmod -R u+rwX /lucene/indexes/

и

sudo chmod -R 755 /lucene/indexes/

Но все та же ошибка. Может ли кто-нибудь пролить свет на это?

Благодарю вас!

Редактировать: После еще одного расследования я уверен, что это проблема разрешений. Если я укажу полный путь к моему корню приложения Spring, это сработает. Я до сих пор не знаю, как указать это, не указывая полный путь.


person nilsi    schedule 09.04.2014    source источник


Ответы (1)


Относительные пути относятся к каталогу, из которого запускается процесс Java. Если у вас есть скрипт запуска или аналогичный, посмотрите в каталоге этого скрипта. Абсолютные пути работают нормально, но, конечно, вам нужны права на запись.

Если вам нужно более универсальное решение для вашего случая, вы можете, например, установить правильный каталог в качестве системного свойства при запуске приложения и прочитать его оттуда при создании Свойства. Или вы пытаетесь другим способом определить полный путь вашего приложения во время выполнения.

person Hardy    schedule 10.04.2014
comment
Я задаю себе аналогичный вопрос; Я не знаю, к какому каталогу приводит относительный путь. В моем application.properties я указал /data/index/default в качестве индексной базы гибернации по умолчанию. Но я не могу найти такую ​​папку нигде в своем каталоге приложений, несмотря на то, что она создается, когда весенняя загрузка запускает приложение. - person nonNumericalFloat; 10.01.2020