项目 运行 时不会创建新日期

New dates are not created when the project is running

当项目为运行时,数据从数据库上传,然后形成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();
    }
}

因为 spring bean 是单例 fileDate2fileDate3 将用 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();

顺便说一句:停止使用过时的 SimpleDateFormatjava.util.Date class。使用现代 java.time.* API