java) Value アノテーションとclasspath

@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())...

Post
Category
Series