我写了一个类来自动初始化报表,但在我修改模板后,每次重启项目会再次初始化,导致我的修改无效,该如何让初始化过的不再初始化
代码如下
@Component
public class BrsReportImport implements ApplicationRunner {
@Autowired
private ReportImportExport reportImportExport;
private static final Logger log = LoggerFactory.getLogger(BrsReportImport.class);
@Authenticated
@Override
public void run(ApplicationArguments args) throws Exception {
try {
String zipEntryPath = "classpath*:info/tianlan/iom/eng/bsh/resource/*.zip";
// 创建一个资源模式解析器
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// 使用资源模式解析器匹配符合条件的所有资源
Resource[] resources = resolver.getResources(zipEntryPath);
// 遍历匹配到的资源
for (Resource resource : resources) {
// 获取文件名,并打印输出
String zipFileName = Objects.requireNonNull(resource.getFilename());
reportImport(zipFileName);
}
log.info("执行run()方法成功");
} catch (Exception e) {
log.error("执行run()方法失败", e);
}
}
/**
* 导入报表压缩文件
*
* @param zipFileName
*/
private void reportImport(String zipFileName) {
try {
//获取当前类的ClassLoader
ClassLoader classLoader = getClass().getClassLoader();
// 使用ClassLoader获取资源流
InputStream inputStream = classLoader.getResourceAsStream("info/tianlan/iom/eng/bsh/resource/" + zipFileName);
// 检查输入流是否为null
if (inputStream == null) {
log.error("执行reportImport()方法失败: 报表文件 {} 没有找到", zipFileName);
return;
}
// 读取输入流中的数据,并写入到字节数组输出流中
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, bytesRead);
}
// 调用 reportImportExport 对象的 importReports 方法,传入字节数组数据
reportImportExport.importReports(byteArrayOutputStream.toByteArray());
log.info("执行reportImport()方法成功");
} catch (Exception e) {
log.error("执行reportImport()方法失败", e);
}
}
}