@Value(classpath)
@Value("classpath:...")を使用する場合
- JAR外部リソース:
@Valueは、外部ファイルシステムでリソースが見つかる場合、ファイルパスとしてそのリソースをロードします。- JAR内部リソース: JAR内に含まれるリソースは、ファイルパスで直接アクセスすることはできません。
getInputStream()を通じてリソースを読み取る必要があります。Spring はこの場合、自動的にResourceオブジェクトを通じてリソースを提供します。リソースはInputStreamを使用して読み取ることができます。
WAR デプロイ時
- tomcat は WAR が展開されたディレクトリの
WEB-INF/classes/(実際のファイルシステムのパス) をクラスパスに追加します。 - リソースに直接アクセス可能です。
1@Value("classpath:menu.xml")
2private Resource menuFile;
3
4...
5
6menuFile.getFile()
JAR デプロイ時
getFile()はFileオブジェクトを返すべきですが、JAR 内部のファイルは圧縮されているため、直接Fileに変換することはできません。getInputStream()を通じて、圧縮された JAR 内部のリソースを直接読み取ります。
1@Value("classpath:menu.xml")
2private Resource menuFile;
3
4...
5
6try (InputStream inputStream = menuFile.getInputStream())...