簡體   English   中英

Spring Boot:無法從資源加載文件

[英]Spring Boot: can't load file from resources

我的Spring Boot項目中有幾個帶有SQL查詢的文件。 這些查詢按路徑定位

spring-boot-sql-in-files/src/main/resources/sql/query.sql

當我運行我的應用程序時,我將這些查詢加載到靜態變量中。

private static final String PATH_PREFIX = "src/main/resources/sql/";

public static String loadQueryFromFile(@NonNull String fileName) {
    try {
        return FileUtils.readFileToString(new File(PATH_PREFIX + fileName), Charset.defaultCharset());
    } catch (Exception e) {
        log.error("Error occurred during loading sql file to string, file=" + fileName, e);
        throw new QueryNotLoadedException();
    }
}

當我使用IDE運行它時,它工作正常,但是當我運行name.jar文件時,它不工作,出現以下錯誤:

java.io.FileNotFoundException: File 'src/main/resources/sql/query.sql' does not exist

如何解決此問題?

src/main/java這樣的src/main/resources成為您的類路徑的根,因此將無法工作。 打包成jar時,它不僅適用於sql ,也不適用於文件。 相反,使用Spring Resource抽象來加載文件,並使用StreamUtils將其加載到String

public static String loadQueryFromFile(@NonNull String fileName) {
    try {
        Resource resource = new ClassPathResource("sql/" + fileName);
        return StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset());
    } catch (Exception e) {
        log.error("Error occurred during loading sql file to string, file=" + fileName, e);
        throw new QueryNotLoadedException();
    }
}

這樣的事情應該可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM