Как сохранить данные из базы данных в файл EXCEL/Весенняя загрузка

#java #spring #spring-boot

Вопрос:

Сущность

 @Getter
@NoArgsConstructor
@AllArgsConstructor
@Immutable
@Entity
@Table(name = "payments_payment")
public class ClientEntity {

    @Id
    private Long id;

    @Column(name = "created_dt")
    private LocalDate created_dt;

    @Column(name = "username")
    private String username;

    @Column(name = "name")
    private String name;

    @Column(name = "amount")
    private Integer amount;

    @Column(name = "status")
    private String status;

    @Column(name = "account")
    private String account;

    @Column(name = "external_id")
    private String external_id;

    @Column(name = "external_status")
    private String external_status;
}
 

Служба планировщиков

 @Component
public class SchedulerService {

    @Autowired
    //private final AttachmentEmail attachmentEmail;
    private final JdbcTemplate jdbc;

    private static final String QUERY = "SELECT pp.id, pp.created_dt, au.username, ss.name, pp.amount,n"  
            "REPLACE(pp.status, 'SUCCESS', 'Success') AS status, pp.account,n"  
            "pp.external_id, COALESCE(pp.external_status, null, 'Indefined') AS external_statusn"  
            "FROM payments AS ppn"  
            "INNER JOIN auth_user AS au ON au.id = pp.creator_idn"  
            "INNER JOIN services AS ss ON ss.id = pp.service_idn"  
            "WHERE pp.created_dt::date = (CURRENT_DATE - INTERVAL '1' day)::daten"  
            "AND ss.name = 'Somename' AND pp.status = 'SUCCESS'";

    private static final DateTimeFormatter date_format = DateTimeFormatter.ofPattern("dd.MM.yyyy");
    private static final DateTimeFormatter time_format = DateTimeFormatter.ofPattern("HH:mm:ss");

    public SchedulerService(AttachmentEmail attachmentEmail, JdbcTemplate jdbc) {

        //this.attachmentEmail = attachmentEmail;
        this.jdbc = jdbc;
    }

    @Scheduled(fixedRate = 20000)
    public void sendMail() {
        String filename = "select.csv";

        try (FileWriter writer = new FileWriter(filename)) {

            writer.append("id|Date|Time|Initiator|Service|Amount|Payment Status|Props|Identifier|External Status").append("n");

            this.jdbc.query(QUERY, (ResultSet rs) -> writeLine(writer, rs));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void writeLine(FileWriter writer, ResultSet rs) {
        try {
            LocalDateTime ldt = rs.getTimestamp("created_dt").toLocalDateTime();
            writer.append(String.valueOf(rs.getLong("id")));
            writer.append('|');
            writer.append(ldt.format(date_format));
            writer.append('|');
            writer.append(ldt.format(time_format));
            writer.append('|');
            writer.append(rs.getString("username"));
            writer.append('|');
            writer.append(rs.getString("name"));
            writer.append('|');
            writer.append(String.valueOf(rs.getBigDecimal("amount")));
            writer.append('|');
            writer.append(rs.getString("status"));
            writer.append('|');
            writer.append(rs.getString("account"));
            writer.append('|');
            writer.append(rs.getString("external_id"));
            writer.append('|');
            writer.append(rs.getString("external_status"));
            writer.append('n');
        } catch (Exception e) {
            throw new IllegalStateException(e);
        }
    }
}
 

Я использую этот код для сохранения выборки из базы данных в файл csv. Это работает без проблем. Но я хотел бы сохранить этот выбор в файле Excel. Я пробовал использовать библиотеку poi apache. Но я не могу этого сделать, потому что не могу найти, как сохранить ЗАПРОС. Дело в том, что в своем проекте я буду использовать еще один выбор из другой базы данных, а затем сравнивать результаты этих выборов. Я также хотел бы сделать это через репозиторий, чтобы сохранить ЗАПРОС в списке.