@Transactional(readOnly = true) public int buildAll() { int buildCount = 0; for (int i = 0; i < articleDao.count(); i += 20) { List<Article> articles = articleDao.findList(i, 20, null, null); for (Article article : articles) { buildCount += build(article); } articleDao.clear(); } for (int i = 0; i < productDao.count(); i += 20) { List<Product> products = productDao.findList(i, 20, null, null); for (Product product : products) { buildCount += build(product); } productDao.clear(); } buildIndex(); buildSitemap(); buildOther(); return buildCount; }
@Transactional(readOnly = true) public int buildSitemap() { int buildCount = 0; Template sitemapIndexTemplate = templateService.get("sitemapIndex"); Template sitemapTemplate = templateService.get("sitemap"); Map<String, Object> model = new HashMap<String, Object>(); List<String> staticPaths = new ArrayList<String>(); for (int step = 0, index = 0, first = 0, count = SITEMAP_MAX_SIZE; ; ) { try { model.put("index", index); String templatePath = sitemapTemplate.getTemplatePath(); String staticPath = FreemarkerUtils.process(sitemapTemplate.getStaticPath(), model); if (step == 0) { List<Article> articles = articleDao.findList(first, count, null, null); model.put("articles", articles); if (articles.size() < count) { step++; first = 0; count -= articles.size(); } else { buildCount += build(templatePath, staticPath, model); articleDao.clear(); articleDao.flush(); staticPaths.add(staticPath); model.clear(); index++; first += articles.size(); count = SITEMAP_MAX_SIZE; } } else if (step == 1) { List<Product> products = productDao.findList(first, count, null, null); model.put("products", products); if (products.size() < count) { step++; first = 0; count -= products.size(); } else { buildCount += build(templatePath, staticPath, model); productDao.clear(); productDao.flush(); staticPaths.add(staticPath); model.clear(); index++; first += products.size(); count = SITEMAP_MAX_SIZE; } } else if (step == 2) { List<Brand> brands = brandDao.findList(first, count, null, null); model.put("brands", brands); if (brands.size() < count) { step++; first = 0; count -= brands.size(); } else { buildCount += build(templatePath, staticPath, model); brandDao.clear(); brandDao.flush(); staticPaths.add(staticPath); model.clear(); index++; first += brands.size(); count = SITEMAP_MAX_SIZE; } } else if (step == 3) { List<Promotion> promotions = promotionDao.findList(first, count, null, null); model.put("promotions", promotions); buildCount += build(templatePath, staticPath, model); promotionDao.clear(); promotionDao.flush(); staticPaths.add(staticPath); if (promotions.size() < count) { model.put("staticPaths", staticPaths); buildCount += build( sitemapIndexTemplate.getTemplatePath(), sitemapIndexTemplate.getStaticPath(), model); break; } else { model.clear(); index++; first += promotions.size(); count = SITEMAP_MAX_SIZE; } } } catch (Exception e) { e.printStackTrace(); } } return buildCount; }