項目中有遇到項目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!");
}
}
親測有效,測試結果這兒省略
......