SpringBoot添加一個model作爲初始化模塊,打成jar包後,讀取resources目錄下的多個文件上傳

項目中有遇到項目jar包啓動後上傳resource目錄下某個文件夾(優先上傳jar包同目錄文件夾裏的所有文件)。網上找了很久,現在總結一下。

1.項目啓動時初始化

可能又很多種實現方法,但目前我只研究過一種,那就是實現CommandLineRunner接口,要實現初始化的邏輯放在實現的run方法中執行,代碼如下:

    @Override
    public void run(String... args) throws Exception {
        loadScriptFromLocal();
        loadDeviceTypeConfigFromLocal();
    }

引入一個問題:

如果我們有多個實體實現了CommandLineRunner接口,那我們如何保證他們的執行順序呢?

解決辦法:

在每個實體上加上註解@Order,如:

@Slf4j
@Component
@Order(value=1)
public class InitializeDeviceType implements CommandLineRunner {
......
}

2.多文件上傳並且把File轉成MultipartFile 

 private void loadScriptFromLocal() {
        String directory = "xxxxxxx";
        File[] fileArr = getFiles(directory);
        if (null != fileArr) {
            log.info("...xxxxxxx");
            for (File file : fileArr) {
                //文件校驗
                if (!validateFile(file, FileType.xxxx.getMsg())) {
                    log.warn("........", file.getName());
                    continue;
                }
                InputStream inputStream;
                MultipartFile multipartFile;
                try {
                    inputStream = new FileInputStream(file);
                    multipartFile = new MockMultipartFile(file.getName(), file.getName(), null, inputStream);
                } catch (IOException e) {
                    log.error("xxxxxxx:", e);
                    continue;
                }
                if (!initializeService.saveScript(multipartFile)) {
                    log.info("xxxxxxxx!", multipartFile.getOriginalFilename());
                }
            }
        } else {
            log.info("xxxxxxxxxx!");
        }

    }

親測有效,測試結果這兒省略

......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章