在tomcat 8的共享文件夹中添加属性文件,并在Spring MVC Web应用程序中使用它

我有一个Java Spring MVC Web应用程序。 我使用application.properties文件来设置一些属性值。 现在我试图让属性独立于war文件。 我在tomcat下创建了一个新的文件夹shared / classes,如下所示。

夹

catalina.properties文件中,我添加了shared.loader=${catalina.base}/shared/classes

在我的root-context.xml文件中,我添加了

  

但我收到以下错误:

 ERROR osweb.context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: E:\projects\smartwcm\workspace-20163101-eclipse-wp\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\shared\classes\application.properties (The system cannot find the path specified) 

我该如何解决这个问题?

这可能是eclipe创建的Servers文件夹的限制之一。 它实际放置的位置是这个文件夹的内容

.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf

我在本地试过这个,eclipse似乎没有发布我创建的任何文件夹。 eclipse Tomcat v8.0 Server at localhost-config命名Tomcat v8.0 Server at localhost-config文件夹时非常具体。 这也可能意味着属性配置文件是唯一可接受的系统文件。 我可以通过将application.properties文件放在与catalina.properties相同的级别来使一切工作得很好。 然后我用eclipse发布,然后当我查看临时文件夹时,应用程序文件就在那里。 无论如何,似乎没有特定的理由让您的文件在shared/classes 。 毕竟,据我所知,它们是要在服务器中共享的属性,所以我想说它们的正确位置在config文件夹中。

看看这个answear。 也许它会有所帮助

在基于servlet的应用程序中放置位置以及如何读取配置资源文件?

看起来$ {catalina.base}被解释为:

E:\项目\ smartwcm \ workspace下-20163101-Eclipse的wp.metadata.plugins \ org.eclipse.wst.server.core \ TMP0

您是否在正在运行的计算机上设置了$ CATALINA_BASE变量?

我想你需要指向$ {catalina.home}。 Catalina.base是安装tomcat的地方,catalina.home是运行tomcat的地方。 (这是由于tomcat多主机环境;您可以拥有一个tomcat和多个主机的安装程序)。

当遇到这样的问题时(如果你在Windows上),你应该使用Sysinternals套件中的程序FileMon。 您应该设置一个fiter:“PATH包含YOURFILE.NAME”并查看查找文件的搜索路径。 然后,您可以轻松找出java进程尝试查找文件的位置并将其放在相应的文件夹中。

但是,最好在服务器home / base之外的某处设置一个普通目录,并通过绝对OS文件路径引用它。