LoginSignup
2
3

More than 5 years have passed since last update.

Spring Bootでapplication.xmlという名前のBean定義ファイルを使って嵌った

Posted at

背景

  • Spring MVCをwar packagingで使っていて、そのBean定義ファイルをapplication.xmlという名前にしていた。
  • Spring Bootで動かしたくなったので、まずは@ImportResourceでapplication.xmlを読み込めるか試した。
  • classpathに含まれるように、src/main/resources直下にapplication.xmlを置いた

現象

以下のようなエラーが出る。

java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.xml'

... stack trace ...

Caused by: java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException; lineNumber: 19; columnNumber: 87; Document root element "beans", must match DOCTYPE root "null".

... stack trace ...

原因

Spring BootのConfigFileApplicationListenerが、xmlをBean定義ファイルではなく設定ファイル(application.properties相当)として読み込もうとしてエラーになる。

デフォルトの設定ファイル名がapplicationで、PropertiesPropertySourceLoaderが対応している拡張子にxmlが含まれるため、application.xmlが読み込み候補のファイル名になる。また、設定ファイルのデフォルトのlocationにはclasspath直下が含まれるので、classpath:/application.xmlが読み込まれる。結果として、@ImportResourceしようがしまいが関係なく、src/main/resources直下にapplication.xmlを置いた時点で悲しい選択だった。

回避策

  • ファイル名を変える
    そもそもapplication.xmlという名前をなんとなくで使ってたのが良くない。 Spring Frameworkのドキュメント通りに作ればおそらく applicationConfig.xml になるので、普通の人は遭遇することは無さそう。
  • Java化する
    これを期に@Configuration化するのも良いタイミングなのかも。
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3