專案運行時,從資料庫中上傳資料,然后形成excel檔案,并記錄上傳時的日期。在本地,該專案正常作業。但在服務器上,日期僅在部署時設定。這不應該。日期必須在檔案生成時設定。該專案由 Docker 提供支持。我不知道是什么原因。是在我的代碼中還是在 Docker 設定中。在本地,我有 Windows。服務器 - Linux
@Component
public class SaveProviders {
@Autowired
private ProviderService providerService;
String fileDate2 = new SimpleDateFormat("MMMM").format(new Date());
String fileDate3 = new SimpleDateFormat("dd.MM").format(new Date());
private static final Logger LOGGER = LoggerFactory.getLogger(SaveProviderStartupRunner.class);
public void saveCardsDay() throws IOException {
LocalDate today = LocalDate.now();
String fileDate = new SimpleDateFormat("dd.MM.yyyy").format(new Date());
String fileDate1 = (today.minusDays(1)).format(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
saveExcel(providerService.findAllProviders(), "Report" fileDate1 ".xlsx");
}
private void saveExcel(List<Providers> list, String fileName) throws IOException {
Workbook workbook = new XSSFWorkbook();
CreationHelper createHelper = workbook.getCreationHelper();
Sheet sheet = workbook.createSheet("Providers");
sheet.autoSizeColumn(0);
sheet.setColumnWidth(1, 2500);
sheet.setColumnWidth(2, 2500);
sheet.setColumnWidth(3, 3000);
sheet.setColumnWidth(4, 12000);
sheet.autoSizeColumn(5);
sheet.autoSizeColumn(6);
sheet.setColumnWidth(7, 5000);
sheet.setColumnWidth(8, 12000);
sheet.setColumnWidth(9, 10000);
Row header = sheet.createRow(0);
CellStyle headerStyle = workbook.createCellStyle();
headerStyle.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
XSSFFont font = ((XSSFWorkbook) workbook).createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 10);
font.setBold(true);
headerStyle.setFont(font);
Cell headerCell = header.createCell(0);
headerCell.setCellValue("id");
headerCell.setCellStyle(headerStyle);
/.../
CellStyle style = workbook.createCellStyle();
style.setWrapText(true);
CellStyle style1 = workbook.createCellStyle();
style1.setDataFormat(
createHelper.createDataFormat().getFormat("d/m/yyyy"));
CellStyle style2 = workbook.createCellStyle();
style2.setDataFormat(
createHelper.createDataFormat().getFormat("h:mm:ss"));
int ix_row=2;
for (Providers providers : list) {
Row row = sheet.createRow(ix_row);
Cell cell = row.createCell(0);
cell.setCellValue(providers.getId());
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue(providers.getCreated_dt());
cell.setCellStyle(style1);
cell = row.createCell(2);
cell.setCellValue(providers.getCreated_dt());
cell.setCellStyle(style2);
cell = row.createCell(3);
cell.setCellValue(providers.getUsername());
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue(providers.getName());
cell.setCellStyle(style);
cell = row.createCell(5);
cell.setCellValue(providers.getAmount());
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellValue(providers.getStatus());
cell.setCellStyle(style);
cell = row.createCell(7);
cell.setCellValue(providers.getAccount());
cell.setCellStyle(style);
cell = row.createCell(8);
cell.setCellValue(providers.getExternal_id());
cell.setCellStyle(style);
cell = row.createCell(9);
cell.setCellValue(providers.getExternal_status());
cell.setCellStyle(style);
ix_row ;
}
File pathAsFile = new File("/Reports/Partner_reports_" fileDate2);
try {
pathAsFile.mkdirs();
LOGGER.info("Folder partners created");
} catch (Exception e) {
LOGGER.error("Folder partners not created cause" e.getMessage());
}
File pathAsFile1 = new File("/Reports/Partner_reports_" fileDate2 "/" fileDate3);
try {
pathAsFile1.mkdirs();
LOGGER.info("Daily folder partners created");
} catch (Exception e) {
LOGGER.error("Daily folder partners not created cause" e.getMessage());
}
File outputFile = new File(pathAsFile1, fileName);
FileOutputStream outputStream = new FileOutputStream(outputFile);
workbook.write(outputStream);
workbook.close();
}
}
uj5u.com熱心網友回復:
由于 spring bean 是一個單例fileDate2,并且fileDate3將使用 bean 進行初始化,恰好是一次。將其移動到您的 saveExcel 中。
@Component
public class SaveProviders {
@Autowired
private ProviderService providerService;
private static final DateFormat mounthFormat = new SimpleDateFormat("MMMM");
private static final DateFormat dayMounthFormat= new SimpleDateFormat("dd.MM");
private static final Logger LOGGER = LoggerFactory.getLogger(SaveProviderStartupRunner.class);
public void saveCardsDay() throws IOException {
LocalDate today = LocalDate.now();
String fileDate = new SimpleDateFormat("dd.MM.yyyy").format(new Date());
String fileDate1 = (today.minusDays(1)).format(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
saveExcel(providerService.findAllProviders(), "Report" fileDate1 ".xlsx");
}
private void saveExcel(List<Providers> list, String fileName) throws IOException {
String fileDate2 = mounthFormat.format(new Date());
String fileDate3 = dayMounthFormat.format(new Date());
Workbook workbook = new XSSFWorkbook();
BTW:停止使用過時的SimpleDateFormat和java.util.Date類。使用現代java.time.*API
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/436338.html
