引入maven库
<dependency>
<groupId>com.github.dfabulich</groupId>
<artifactId>sitemapgen4j</artifactId>
<version>1.1.1</version>
</dependency>
生成sitemap代码
@Component
public class SiteMapTask {
@Autowired
private ArticleService articleService;
@Autowired
private SiteService siteService;
@Scheduled(cron = "0 0 2 * * ?")
public void schedulerUpdateSitemap() throws MalformedURLException {
if (!SystemUtils.isLinux()) {
return;
}
List<Site> sites = siteService.list();
for (Site site : sites) {
if (StringUtils.isBlank(site.getBdVerifyName())) {
continue;
}
startSitemap(site);
}
}
/**
* 开始更新
*
* @param site
* @throws MalformedURLException
*/
private void startSitemap(Site site) throws MalformedURLException {
File sitemapDir = new File("sitemap/" + site.getSite());
if (!sitemapDir.exists()) {
sitemapDir.mkdirs();
}
File sitemapFolder = new File(sitemapDir, "sitemap");
if (!sitemapFolder.exists()) {
sitemapFolder.mkdirs();
}
File sitemap = new File(sitemapDir, "sitemap.xml");
WebSitemapGenerator sitemapGenerator = null;
LocalDateTime localDateTime = null;
LocalDateTime generateStartTime = LocalDateTime.now().withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
for (int i = 0; i < Integer.MAX_VALUE; i++) {
PageEntity pageEntity = PageEntity.page(i + 1, 100);
List<Article> articles = articleService.list(Wrappers.<Article>lambdaQuery().select(Article::getId, Article::getCreateTime).ge(Article::getCreateTime, generateStartTime).orderByAsc(Article::getId).last("limit " + pageEntity.getStart() + "," + pageEntity.getPageSize()));
for (Article article : articles) {
if (sitemapGenerator == null || localDateTime.getYear() != article.getCreateTime().getYear() || localDateTime.getMonthValue() != article.getCreateTime().getMonthValue()) {
if (sitemapGenerator != null) {
sitemapGenerator.write();
}
sitemapGenerator = WebSitemapGenerator.builder("https://" + site.getSite(), sitemapFolder)
.fileNamePrefix(DateUtils.formatYMD(LocalDateTime.now())).build();
}
sitemapGenerator.addUrl(new WebSitemapUrl(new WebSitemapUrl.Options("https://" + site.getSite() + "/a/" + article.getId() + ".html")
.lastMod(DateUtils.getDate(article.getCreateTime())).changeFreq(ChangeFreq.DAILY).priority(0.8)));
}
if (articles.size() == 0 || articles.size() < 100) {
break;
}
}
if (sitemapGenerator != null) {
sitemapGenerator.write();
}
SitemapIndexGenerator sig = new SitemapIndexGenerator("https://" + site.getSite(), sitemap);
File[] files = sitemapFolder.listFiles();
for (File file : files) {
sig.addUrl("https://" + site.getSite() + "/sitemap/" + file.getName());
}
sig.write();
}
}
通过代码生成
sitemap
-- sitemap.xml
-- sitemap
-- 2023-10-25.xml