物體
@Entity
public class Card {
@Id
private Long id;
private String full_name;
private String login;
private int balance;
public Card() {
}
public Card(String full_name, String login, int balance) {
this.full_name = full_name;
this.login = login;
this.balance = balance;
}
public Card(Long id, String full_name, String login, int balance) {
this.id = id;
this.full_name = full_name;
this.login = login;
this.balance = balance;
}
public String getFull_name() {
return full_name;
}
public String getLogin() {
return login;
}
public int getBalance() {
return balance;
}
@Override
public String toString() {
......... }
}
存盤庫
@Repository
public interface CardRepository extends JpaRepository<Card, Long>{
@Query(value = "SELECT us.id, ...", nativeQuery = true)
List<Card> findAll();
}
服務
public interface CardService {
List<Card> findAll();
}
實施
@Service
public class CardServiceImpl implements CardService {
@Autowired
private CardRepository repository;
@Override
public List<Card> findAll() {
List<ECard> list = new ArrayList<>();
return repository.findAll();
}
}
控制器
@RestController
@RequestMapping("/card")
public class CardController {
@Autowired
private CardService cardService;
public @ResponseBody List<Card> getAllCards() {
return cardService.findAll();
}
@RequestMapping( value = "/card", method = RequestMethod.GET)
public List<Card> cardList() {
return cardService.findAll();
}
}
我建立了這樣的服務。它作業得很好。但我想將它收到的資料保存到一個 xlsx 檔案中。該檔案應在應用程式啟動時保存。我想添加 Workbook 庫而不是現有的 Controller 類,或者更確切地說是它的內容。
類似的東西:
public class SaveCards {
public static void saveCards() throws IOException {
CardServiceImpl cardService = new CardServiceImpl();
saveExcel(cardService.findAll(), "fileName.xlsx");
}
private static void saveExcel(List<Card> list, String fileName) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Cards");
sheet.setColumnWidth(0, 6000);
sheet.setColumnWidth(1, 4000);
Row header = sheet.createRow(0);
CellStyle headerStyle = workbook.createCellStyle();
headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
XSSFFont font = ((XSSFWorkbook) workbook).createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 16);
font.setBold(true);
headerStyle.setFont(font);
Cell headerCell = header.createCell(0);
headerCell.setCellValue("full_name");
headerCell.setCellStyle(headerStyle);
headerCell = header.createCell(1);
headerCell.setCellValue("login");
headerCell.setCellStyle(headerStyle);
headerCell = header.createCell(2);
headerCell.setCellValue("balance");
headerCell.setCellStyle(headerStyle);
CellStyle style = workbook.createCellStyle();
style.setWrapText(true);
int ix_row=2;
for (Card card : list) {
Row row = sheet.createRow(ix_row);
Cell cell = row.createCell(0);
cell.setCellValue(eCard.getFull_name());
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue(eCard.getLogin());
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue(eCard.getBalance());
cell.setCellStyle(style);
ix_row ;
}
FileOutputStream outputStream = new FileOutputStream(fileName);
workbook.write(outputStream);
workbook.close();
}
}
但是,如果我將 Controller 類更改為 SaveCards 類,則會出現錯誤:Error created bean with name 'viewResolver' Spring
現在,結果如下:在 11.253 秒內啟動 DemonewApplication(JVM 運行時間為 11.882)。就是這樣,沒有任何動作發生,select 接收到的資料不會保存到 xlsx 檔案中。我究竟做錯了什么?
我知道必須在某個地方呼叫 SaveCards 類中的 saveCards 方法,但我不知道在哪里?
uj5u.com熱心網友回復:
您可以擴展org.springframework.boot.ApplicationRunner以在 Spring Boot 啟動時運行您的代碼。
@Component
class SaveCardsStartupRunner implements ApplicationRunner
{
@Autowired
private SaveCards saveCards;
@Override
public void run(ApplicationArguments args)
{
saveCards.saveCards();
}
}
并且SaveCards類必須更改如下:
@Component
public class SaveCards {
{
@Autowired
private CardService cardService;
public void saveCards() throws IOException {
saveExcel(cardService.findAll(), "fileName.xlsx");
}
private void saveExcel(List<Card> list, String fileName) throws IOException {...}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360875.html
