[解決済み] Spring は Bean xml 設定ファイルが存在するにもかかわらず見つけることができない
質問
Springで最初のBeanを作ろうとしているのですが、コンテキストの読み込みで問題が発生しました。 私はsrc/main/resourcesにBeanの構成XMLファイルを持っています。
次のようなIOExceptionが発生します。
スレッド "main" org.springframework.beans.factory.BeanDefinitionStoreException で例外が発生しました。IOException parsing XML document from class path resource [src/main/resources/beans.xml]; nested exception is.
java.io.FileNotFoundException: クラス パス リソース [src/main/resources/beans.xml] は存在しないため開けません。 存在しないため、開くことができません。
と表示されますが、以下のようなコードテストを行うため、取得できません。
File f = new File("src/main/resources/beans.xml");
System.out.println("Exist test: " + f.exists());
で、true!
resources
はクラスパスにあります。どうしたのでしょうか?
どのように解決するのですか?
ありがとうございます、しかしそれは解決策ではありませんでした。私はそれが私のために動作していなかった理由を発見した。
宣言をしてから
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
beans.xmlがある時点で、プロジェクトのルートディレクトリを参照しようと思っていました。 そこで、設定ファイルをsrc/main/resourcesに置き、初期化を変更しました。
ApplicationContext context = new ClassPathXmlApplicationContext("src/main/resources/beans.xml");
は、やはりIO Exceptionでした。
その後、ファイルはsrc/main/resources/に残っていましたが、宣言を変えてみました。
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
で、問題は解決しました。もしかしたら、誰かの役に立つかもしれません。
ありがとうございます、そしてありがとうございます。
編集する
数年前に学生時代に初めてSpringを使ったことがあり、その解決策を多くの人に評価してもらったので、なぜうまくいくのかを手短に説明したいと思います。
プロジェクトがコンパイルされパッケージ化されるとき、プロジェクト内の 'src/main/java' からのすべてのファイルとサブディレクトリは、パッケージ化された jar (作成したい成果物) のルートディレクトリに移動します。同じルールが 'src/main/resources' にも適用されます。
これは、プロジェクトを構築する過程で、mavenやsbtのような多くのツールによって尊重される慣習です(注: デフォルトの設定として!)。(投稿の) コードが実行モードになっているとき、beans.xml が jar のルートにあった (作成された jar/ear/war の /beans.xml にコピーされた) という事実のために "src/main/resources/beans.xml" など何も見つけることが出来ませんでした。
ClassPathXmlApplicationContext を使用する場合、bean xml 定義の適切な場所宣言は、この場合、" /beans.xml" であり、これは jar および後でクラスパスに属するパスであるためです。
これは、アーカイバ (例: rar) で jar を解凍し、ディレクトリ構造でその内容を確認することで検証できます。
補足として、クラスパスに関する記事を読むことをお勧めします。
関連
-
[解決済み] Spring Data JPAでネイティブクエリ結果をNon-Entity POJOにマップする。
-
[解決済み] Spring @PostConstruct と init-method 属性の比較
-
[解決済み] Spring BeanPostProcessorは具体的にどのように動作するのですか?
-
[解決済み] kotlinで@Autowiredのようなspringアノテーションを使用する方法とは?
-
[解決済み] RestTemplateを使ったヘッダ付きHTTP get
-
[解決済み] URI [/WEB-INF/pages/apiForm.jsp] を持つ HTTP リクエストのマッピングが見つかりません [重複]。
-
[解決済み] Spring Cloud Eureka Server の自己保存と更新閾値を理解する
-
[解決済み] Spring Data Rest - 複数のプロパティでソートする
-
[解決済み] SpringでSession Objectを取得するには?
-
[解決済み] Spring Security 403エラー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】IntelliJ IDEAのアプリケーション実行プロファイルで、クラスパスにディレクトリを追加する方法は?
-
[解決済み】Springアプリケーションコンテキストの取得
-
[解決済み] Spring Hibernate - 現在のスレッドでトランザクションに同期したセッションを取得できませんでした。
-
[解決済み] 複数のBeanが見つかった場合、Springはどのように名前による自動配線を行うのですか?
-
[解決済み] Spring DAOとSpring ORMとSpring JDBCの比較
-
[解決済み] URI [/WEB-INF/pages/apiForm.jsp] を持つ HTTP リクエストのマッピングが見つかりません [重複]。
-
[解決済み] Spring Cloud Eureka Server の自己保存と更新閾値を理解する
-
[解決済み] Spring Bootです。PasswordEncoderはどのように指定するのですか?
-
[解決済み] Spring Security 403エラー
-
[解決済み] Spring-BootプロジェクトでCSSなどの静的ファイルをどこに置くか?