JAR として実行するとクラスパス リソースが見つかりません
この問題は、Spring で @Value アノテーションを使用してクラスパス リソースをロードするときに発生する可能性がありますアプリケーションを起動します。 STS などの IDE から実行すると正しく機能しますが、mvn パッケージ経由で生成された jar ファイルを実行すると FileNotFoundException が発生します。
問題への対処
根本的な理由はそのリソースです.getFile() は、リソースがファイル システム上で直接利用可能であることを期待します。ただし、JAR として実行すると、リソースがアーカイブ内にパッケージ化されるため、そのアプローチは無効になります。
解決策
この問題を解決するには、getFile() を getInputStream に置き換えます。 ()。このメソッドを使用すると、場所に関係なくリソースのコンテンツにアクセスできます。変更されたコードは次のとおりです:
<code class="java">@Configuration @ComponentScan @EnableAutoConfiguration public class Application implements CommandLineRunner { private static final Logger logger = Logger.getLogger(Application.class); @Value("${message.file}") private Resource messageResource; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... arg0) throws Exception { // both of these work when running as Spring boot app from STS, but // fail after mvn package, and then running as java -jar testResource(new ClassPathResource("message.txt")); testResource(this.messageResource); } private void testResource(Resource resource) { try { InputStream inputStream = resource.getInputStream(); logger.debug("Found the resource " + resource.getFilename()); } catch (IOException ex) { logger.error(ex.toString()); } } }</code>
以上がSpring Boot アプリケーションを JAR として実行するとクラスパス リソースの検索に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。