我在设置索引的正确路径时遇到问题。如果它在我的spring应用程序中会很棒,因为即使我将我的应用程序部署到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应用程序的根目录的完整路径,它就可以工作。我仍然不知道如何指定它而不给它完整的路径。
答案 0 :(得分:1)
相对路径相对于启动Java进程的目录。如果您在此脚本的目录中有一些启动脚本或类似的外观。绝对路径工作正常,但当然你需要权限写入它。
如果您想为您的案例提供更通用的解决方案,您可以在启动应用程序时将正确的目录设置为系统属性,并在创建属性时从那里读取它。或者您尝试以另一种方式在运行时确定应用程序的完整路径。