У меня есть приведенный ниже код для class IImporter
, который до сих пор работает нормально. Каждый день я получаю много zip-файлов, которые содержат имена как 'EQUFULLFILE'
и 'NONEQUFULLFILE'
в каталоге, и я пытаюсь прочитать файлы из этого каталога и обработать их в таблице базы данных 'EquData'
или 'NonEquData'
соответственно. Перед обработкой я просто пытаюсь удалить все данные из этой таблицы базы данных.
Но я нашел проблему в моем коде. Иногда, когда я не получаю никаких файлов в каталоге 'EQUFULLFILE' or 'NONEQUFULLFILE'
, он просто удаляет данные из таблицы базы данных.
Мне просто нужно немного изменить свой код, чтобы адаптировать логику таким образом, чтобы, когда я не получал никаких файлов в каталоге как 'EQUFULLFILE'
, он не должен был удалять какие-либо данные из таблицы базы данных 'EquData'
. Когда я не получаю никаких файлов в каталоге as'NONEQUFULLFILE'
, он не должен удалять данные из таблицы базы данных 'NonEquData'
.
Любое предложение, пожалуйста?
@Service
public class IImporter {
private final static Logger log = LoggerFactory.getLogger(IImporter.class);
private final static String EQU_FILE_TAG = "EQUFULLFILE";
private final static String NONEQU_FILE_TAG = "NONEQUFULLFILE";
private boolean isEquity;
@Autowired
private IFullreader IFullreader;
@Autowired
private ZipWalker zipWalker;
@Autowired
private SessionFactory sessionFactory;
@Transactional
public void importDir(Path indir) throws IOException {
log.info("Delete all table DATA");
//here the logic should be changed and based on file name table should be deleted
sessionFactory.getCurrentSession().createQuery("delete from EquData").executeUpdate();
sessionFactory.getCurrentSession().createQuery("delete from NonEquData").executeUpdate();
log.info("Process directory" + indir.toString());
Files.walk(indir, 1, FOLLOW_LINKS)
.filter(Files::isRegularFile)
.filter(f -> f.toString().endsWith(".zip"))
.sorted()
.forEach(f -> zipWalker.processZipFile(f, this::importFile));
}
private void importFile(Path path) {
this.isEquity = path.getFileName().toString().contains(EQU_FILE_TAG);
if (isEquity) {
//code for reading data from file EQUFULLFILE
}
else {
//code for reading data from file NONEQUFULLFILE
}
}
}
}
Вы дважды определили EQU_FILE_TAG. Подозреваю, что опечатка.
Как насчет этого?
@Service
public class IImporter {
private final static Logger log = LoggerFactory.getLogger(IImporter.class);
private final static String EQU_FILE_TAG = "EQUFULLFILE";
private final static String NONEQU_FILE_TAG = "NONEQUFULLFILE";
private boolean isEquity;
private boolean equFileFirstTime = true;
private boolean nonequFileFirstTime = true;
@Autowired
private IFullreader IFullreader;
@Autowired
private ZipWalker zipWalker;
@Autowired
private SessionFactory sessionFactory;
@Transactional
public void importDir(Path indir) throws IOException {
log.info("Process directory" + indir.toString());
Files.walk(indir, 1, FOLLOW_LINKS)
.filter(Files::isRegularFile)
.filter(f -> f.toString().endsWith(".zip"))
.sorted()
.forEach(f -> zipWalker.processZipFile(f, this::importFile));
}
private void importFile(Path path) {
this.isEquity = path.getFileName().toString().contains(EQU_FILE_TAG);
if (isEquity) {
if (equFileFirstTime) {
log.info("Delete EQUFULLFILE table DATA");
sessionFactory.getCurrentSession().createQuery("delete from EquData").executeUpdate();
equFileFirstTime = false;
}
//code for reading data from file EQUFULLFILE
}
else {
if (nonequFileFirstTime) {
log.info("Delete NONEQUFULLFILE table DATA");
sessionFactory.getCurrentSession().createQuery("delete from NonEquData").executeUpdate();
nonequFileFirstTime = false;
}
//code for reading data from file NONEQUFULLFILE
}
}
}
да, извините, это был тип для EQU_FILE_TAG ... я проверю и дам вам знать, но похоже на правильную логику :) спасибо