这是一节课 @服务 公共类 DataDeletionServiceImpl 实现 DataDeletionService {
/** The Constant LOGGER. */
private static final Logger LOGGER = LogManager.getLogger(DataDeletionServiceImpl.class.getName());
/** LOG_DELIMITER. */
private static final String LOG_DELIMITER = "deleteExpiredData()# "
+ "######################################################################";
/** LOG_DELIMITER_SRC_IMG. */
private static final String LOG_DELIMITER_SRC_IMG = "deleteExpiredDataFromSrcImgTable()# "
+ "######################################################################";
/** The milliseconds per day. */
private static final long MILLISECONDS_PER_DAY = 86400000; // i.e 1 Day 1*24*60*60*1000
/** The processed data retention days. */
private int processedDataRetentionDays = 0;
/** The processed data retention days for OST_OCR_SRC_IMG table. */
private int processedDataRetentionDaysForSrcImg = 0;
/** The file repository. */
@Autowired
private FileRepository fileRepository;
/** The image source repository. */
@Autowired
private ImageSourceRepository imageSourceRepository;
/** The file source service. */
@Autowired
private FileSourceService fileSourceService;
/** The image source service. */
@Autowired
private ImageSourceService imageSourceService;
/*
* (non-Javadoc)
* @see com.oversighttech.ocr.service.DataDeletionService#deleteExpiredData()
*/
@Override
public void deleteExpiredData() {
LOGGER.info(LOG_DELIMITER);
LOGGER.info("Starting Delete Expired Data operation. Current Time: {}", LocalDateTime.now());
final long startTime = System.currentTimeMillis();
// OCR 将删除所有 OST_OCR_FILE 记录(及其子记录说 OST_OCR_FILE_DATA) // 匹配条件,比如当前时间大于非空 EXT_ACKNOWLEDGE_DATE + //data.retention.period
final long retentionDaysInMillis = getProcessedDataRetentionDays() * MILLISECONDS_PER_DAY; 最终时间戳 deleteEligibleTimestamp = new Timestamp(startTime - retentionDaysInMillis);
LOGGER.info("deleteEligibleTimestamp={}, processedDataRetentionDays={}", deleteEligibleTimestamp, 处理数据保留天数); 最终布尔值 isDetailLoggingEnabled = parseBoolean(getProperty(IS_DELETED_FILE_DETAIL_LOGGING_ENABLED.name()));
long count = 0;
try {
if (isDetailLoggingEnabled) {
LOGGER.info("Delete Expired File Records in Batch of 100");
while (true) {
final List<FileEntity> files = fileRepository
.findTop100ByExtAcknowledgeDateBeforeOrderById(deleteEligibleTimestamp);
// break loop if no files to delete
if (files.isEmpty()) {
LOGGER.info("Expired File Records Not Found");
break;
}
fileRepository.deleteInBatch(files);
fileSourceService.deleteFiles(files);
count = count + files.size();
for (final FileEntity fe : files) {
LOGGER.info(
"Deleted Expired File Record with fileName={}, extAcknowledgeDate={}, id={}, parentFileId={}",
fe.getFileName(), fe.getExtAcknowledgeDate(), fe.getId(), fe.getParentFileId());
}
}
} else {
LOGGER.info("Delete All Expired File Records");
final List<FileEntity> files = fileRepository.findByExtAcknowledgeDateBefore(deleteEligibleTimestamp);
count = fileRepository.deleteByExtAcknowledgeDateBefore(deleteEligibleTimestamp);
fileSourceService.deleteFiles(files);
}
} catch (final Exception e) {
LOGGER.error("Exception While Deleting Expired File Records.", e);
}
final long totalTime = System.currentTimeMillis() - startTime;
LOGGER.info("Completed Delete Expired Data operation in {} milliseconds. {} Files deleted", totalTime, count);
LOGGER.info(LOG_DELIMITER);
}
/** * 获取处理后的数据保留天数。 * * @return 处理后的数据保留天数秒 */ 私有 int getProcessedDataRetentionDays() { 如果 (processedDataRetentionDays == 0) { processedDataRetentionDays = 整数 .parseInt(getProperty(OcrConfigKeys.PROCESSED_DATA_RETENTION_DAYS.name())); } 返回处理过的数据保留天数; }
我试了这么多,我不知道如何进行
@ExtendWith(SpringExtension.class) 公共类 DataDeletionServiceImplTest {
@Mock
private FileRepository fileRepository;
/** The image source repository. */
@Mock
private ImageSourceRepository imageSourceRepository;
/** The file source service. */
@Mock
private FileSourceService fileSourceService;
/** The image source service. */
@Mock
private ImageSourceService imageSourceService;
private
@InjectMocks
DataDeletionServiceImpl dataDeletionServiceImpl = new DataDeletionServiceImpl();
@Test
public void deleteExpiredData() {
MockitoAnnotations.initMocks(this);
dataDeletionServiceImpl.deleteExpiredData();
System.out.println(IS_DELETED_FILE_DETAIL_LOGGING_ENABLED.name());
final long startTime = System.currentTimeMillis();
final long totalTime = System.currentTimeMillis() - startTime;
assertThat(totalTime).isNotNull();
}