Sumber Classpath Tidak Ditemui Semasa Berjalan sebagai JAR
Isu ini boleh dihadapi semasa memuatkan sumber classpath menggunakan anotasi @Value dalam Spring Aplikasi but. Walaupun ia berfungsi dengan betul apabila dijalankan daripada IDE seperti STS, menjalankan fail jar yang dijana melalui pakej mvn menghasilkan FileNotFoundException.
Menangani Isu
Alasan asasnya ialah sumber itu .getFile() menjangkakan sumber akan tersedia secara langsung pada sistem fail. Walau bagaimanapun, apabila dijalankan sebagai JAR, sumber dibungkus dalam arkib, menjadikan pendekatan itu tidak berkesan.
Penyelesaian
Untuk menyelesaikan isu ini, gantikan getFile() dengan getInputStream (). Kaedah ini membolehkan anda mengakses kandungan sumber tanpa mengira lokasinya. Berikut ialah kod yang diubah suai:
<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>
Atas ialah kandungan terperinci Mengapa Aplikasi But Spring Saya Gagal Mencari Sumber Classpath Apabila Dijalankan sebagai JAR?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!