実際の質問は次のとおりです。XmlWebApplicationContextにコンテキストの相対パスを使用してリソースを読み込ませる方法はありますか?わかりやすくするため、「コンテキストの場所」はsetConfigLocation()
メソッドで指定された最初のファイルの場所です。Springによる相対リソースパスの指定XmlWebApplicationContext
詳細な説明は次のとおりです。
私は中間層のWeb層とSpring IOCでSpring MVCを使用しています。適切なコンテキストは、Spring Documentationに記載されているように階層的に定義されています。ウェブの内容はmy-servlet.xml
で定義され、servicesなどはContextLoaderListener
によってロードされるservices.xml
で定義されます。中間層は、Web層(例えば、すべてがServletContainer内で実行される)または別個に展開することもできます(この場合、services.xml
は、リモートスタブを定義するremote-services.xml
に置き換えられます)。
services.xml
と同じフォルダに、特定のリソース(追加のXMLファイル、何を持っていますか)があり、上記のサービスからアクセスできる必要があります。これらのリソースは、相対パスを使用してservices.xml
の依存関係として指定されています。中間層がデプロイされている場合、スタンドアロンでは正常に動作しますが、サーブレットコンテナ内にデプロイされている場合は動作しません。後者の場合、中間層コンテキストはXmlWebApplicationContext
としてインスタンス化され、サーブレットコンテキストのルートに基づいてすべてのリソースがロードされます。つまり、プレフィックスにはすべて/WEB-INF/とする必要があります。 PropertyPlaceholderConfigurer
を使用しても同様の問題が発生します。
私はクラスパスからリソースをロードすることでこれを多少回避できますが、それは理想的ではありません - スタンドアロンデプロイメントでは、クラスパスにコンフィグレーションフォルダを追加する必要があり、 WEB-INF/classes。
アイデア?
ありがとうございます。リソースをJavaファイルと一緒に置くことは、いくつかのケースでは完全にうまくいきます(私はHibernateクエリなどでそれを行います)。しかし、デプロイ時に変更できるもの(PropertyPlaceholderConfigurerによって使用されるプロパティファイルなど)ではむしろ不便です。それはアクセス可能でなければなりません(例えば、jarファイル内などではありません)。したがって、/ WEB-INF/classesに入れるか、スタンドアロン展開時にクラスパスに 'conf'フォルダを追加する必要があります。 – ChssPly76