基于Java和XxlCrawler獲取各城市月度天氣情況實(shí)踐分享
前言
這篇文章主要來(lái)源于一個(gè)我們家小朋友的一個(gè)作業(yè),作業(yè)的主要內(nèi)容是要求小朋友做一個(gè)統(tǒng)計(jì),在上半學(xué)期學(xué)習(xí)了統(tǒng)計(jì)知識(shí),然后要結(jié)合生活實(shí)際進(jìn)行統(tǒng)計(jì)應(yīng)用,因此有了這個(gè)作業(yè)。具體要求是在一定時(shí)間范圍內(nèi)(一個(gè)月),要求小朋友制作一個(gè)表格,需要記錄一個(gè)月內(nèi)每一天的天氣情況,比如陰晴雨雪。然后在這個(gè)記錄之上,要求統(tǒng)計(jì)出這個(gè)月不同的天氣有多少天?比如晴天多少天,雨天多少天,然后根據(jù)統(tǒng)計(jì)結(jié)果,計(jì)算這個(gè)月最多的天氣是什么?最少的是什么。這題目本身不難,只要每天都進(jìn)行記錄的話(huà),基本也就沒(méi)什么問(wèn)題。然而,中間因?yàn)樾∨笥焉眢w原因。沒(méi)有及時(shí)記錄,中間有一段時(shí)間沒(méi)有及時(shí)記錄。于是我們想,只能到網(wǎng)上查一下歷史天氣。

然而我發(fā)現(xiàn),小朋友中間有好幾天都忘了記錄,數(shù)據(jù)都有空缺。于是只能按照遺忘的日期來(lái)進(jìn)行補(bǔ)數(shù)據(jù)。雖然最后把缺失的數(shù)據(jù)都補(bǔ)回來(lái)了。當(dāng)時(shí)在想,還好只是一個(gè)月的數(shù)據(jù),如果要三個(gè)月,半年,甚至是一年的數(shù)據(jù),我還能一天一天的找數(shù)據(jù)不成。作為技術(shù)人,需要用一點(diǎn)技術(shù)手段來(lái)解決這個(gè)問(wèn)題。
本文主要講解使用Java開(kāi)發(fā)語(yǔ)言,使用XxlCrawler框架進(jìn)行智能的某城市月度天氣抓取實(shí)踐開(kāi)發(fā)。文章首先介紹目標(biāo)網(wǎng)站的相關(guān)頁(yè)面及目標(biāo)數(shù)據(jù)的元素,然后講解在信息獲取過(guò)程的一些參數(shù)配置以及問(wèn)題應(yīng)對(duì),最后結(jié)合實(shí)際代碼實(shí)際抓取一個(gè)城市(以長(zhǎng)沙為例)某月度天氣數(shù)據(jù)。通過(guò)本文,您可以更加了解XxlCrawler的具體使用,知道如何解決頁(yè)面返回慢的情況下如何通過(guò)超時(shí)參數(shù)來(lái)控制數(shù)據(jù)返回的問(wèn)題,如果您是氣象人,需要?dú)庀髷?shù)據(jù),則可以通過(guò)本文來(lái)獲取想研究的地域的歷史天氣數(shù)據(jù)。
一、歷史數(shù)據(jù)獲取
由于我們需要?dú)v史數(shù)據(jù),因此需要找到歷史數(shù)據(jù)源網(wǎng)站。關(guān)于天氣的數(shù)據(jù)有很多網(wǎng)站可以提供。比較權(quán)威的就是國(guó)家的官方網(wǎng)站。這里呢,分享一個(gè)天氣后報(bào)網(wǎng)站天氣后報(bào)網(wǎng),這個(gè)網(wǎng)站上可以提供城市的天氣信息。本節(jié)主要介紹這個(gè)網(wǎng)站的內(nèi)容和具體月度天氣的頁(yè)面。為下一步的信息獲取做準(zhǔn)備。
1、關(guān)于天氣后報(bào)
在瀏覽器中,輸入它的官方網(wǎng)站:http://www.tianqihoubao.com/??梢钥吹剿墓俜浇缑妗?/p>

在上方的導(dǎo)航欄中,點(diǎn)擊歷史天氣,可以切換到歷史天氣查詢(xún)列表,默認(rèn)按照行政區(qū)劃列表的形式展示。

根據(jù)我們的需要,比如(長(zhǎng)沙),點(diǎn)擊我們感興趣的城市,打開(kāi)城市歷史天氣列表:

然后打開(kāi)對(duì)應(yīng)的月度天氣連接,24年4月份。
http://www.tianqihoubao.com/lishi/changsha/month/202404.html
這是實(shí)際的網(wǎng)頁(yè)地址,請(qǐng)注意這個(gè)地址,這里其實(shí)有兩個(gè)變量,第一個(gè)是城市,也就是地址信息中的changsha,另外一個(gè)是時(shí)間即202404,通過(guò)網(wǎng)站靜態(tài)化之后,這些信息都是有規(guī)律的。因此我們可以采用XxlCrawler來(lái)自動(dòng)獲取。

2、信息界面分析
在找到了信息源之后,我們需要分析一些網(wǎng)頁(yè)的結(jié)構(gòu),網(wǎng)頁(yè)信息很多,我們只關(guān)心目標(biāo)數(shù)據(jù)。這里只需要把表格中的幾個(gè)關(guān)鍵信息提取出來(lái)即可。比如日期、天氣狀況、氣溫信息、風(fēng)力風(fēng)向信息。這些關(guān)鍵的信息都是在一個(gè)表格中展示出來(lái)的。在頁(yè)面中打開(kāi)調(diào)試窗口,來(lái)看一下結(jié)構(gòu):

首先來(lái)看一下網(wǎng)頁(yè)結(jié)構(gòu),其主要的div是綁定在一個(gè)id='content'的網(wǎng)頁(yè)元素下的。同時(shí)下面的數(shù)據(jù)是存在在標(biāo)準(zhǔn)的table中,因此我們只需要將table中的tr中循環(huán)提取出來(lái)即可。
二、數(shù)據(jù)的提取開(kāi)發(fā)
在明確了數(shù)據(jù)來(lái)源的網(wǎng)頁(yè)結(jié)構(gòu)之后,這一節(jié)我們來(lái)進(jìn)行實(shí)際的數(shù)據(jù)提取的開(kāi)發(fā)。通過(guò)XxlCrawler組件來(lái)獲取信息。本小節(jié)著重講解代碼的設(shè)計(jì)與實(shí)現(xiàn)。
1、PageVo的定義
熟悉XxlCrawler的朋友知道,PageVO是解析頁(yè)面的一個(gè)對(duì)象。框架在讀取到頁(yè)面的信息后,會(huì)自動(dòng)的將信息按照PageVO的配置,解析到實(shí)體類(lèi)中。因此需要對(duì)PageVO進(jìn)行定義。
@PageSelect(cssQuery = "#content >table >tbody >tr")
@AllArgsConstructor
@NoArgsConstructor
public static class PageVo {
@PageFieldSelect(cssQuery=" >td:eq(0)")
@Excel(name = "日期")
private String day;
@PageFieldSelect(cssQuery = ">td:eq(1)")
@Excel(name = "天氣狀況")
private String weatherInfo;
@PageFieldSelect(cssQuery = ">td:eq(2)")
@Excel(name = "最低氣溫/最高氣溫")
private String weatherTemp;
@PageFieldSelect(cssQuery = ">td:eq(3)")
@Excel(name = "風(fēng)力風(fēng)向(夜間/白天)")
private String weatherWind;
}在PageVO的定義過(guò)程中,我們使用了三個(gè)注解,第一個(gè)是@PageSelect(cssQuery = "#content >table >tbody >tr"),這個(gè)注解是用來(lái)進(jìn)行頁(yè)面抓取綁定的。第二個(gè)是@PageFieldSelect(cssQuery=" >td:eq(0)"),這個(gè)主要是用來(lái)進(jìn)行具體的屬性信息綁定,即解析哪個(gè)信息,設(shè)置到哪個(gè)屬性當(dāng)中去,在循環(huán)中特別好用。不用向之前那樣,自己去解析。第三個(gè)是@Excel(name = "日期"),這個(gè)跟信息獲取關(guān)系不大,只是用來(lái)最后將獲取的信息寫(xiě)入到Excel表格中。當(dāng)然,結(jié)合實(shí)際的需求,您可以把數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中,這樣子可以在后期在需要的時(shí)候進(jìn)行查詢(xún)進(jìn)行分析。
2、屬性定義
按照J(rèn)avaOOP的設(shè)計(jì)思想,這里我們將一些信息封裝起來(lái),比如User-Agent還有公共的請(qǐng)求地地址等統(tǒng)一定義,在進(jìn)行信息抓取時(shí)可以直接使用。關(guān)鍵代碼如下:
private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"; private List<PageVo> weatherList = new ArrayList<PageVo>(); private static final String COMMON_URL = "http://www.tianqihoubao.com/lishi/changsha/month/";
weatherList就是用來(lái)保存所有的天數(shù)數(shù)據(jù)的,在程序的最后可以用來(lái)保存數(shù)據(jù)或者持久化的作用。
3、實(shí)際信息抓取
這里來(lái)定義實(shí)際信息抓取對(duì)象的配置,以及實(shí)際啟動(dòng)邏輯。
@Test
public void fetchWeaterInfo() {
int year = 2023;
int month = 9; // 月份從 0 開(kāi)始,3 表示4月份
String monthStr = "";
monthStr += month < 10 ? "0" + month : month;
String targetUrl = COMMON_URL + year + monthStr + ".html";
System.out.println(targetUrl);
// 構(gòu)造爬蟲(chóng)
XxlCrawler crawler = new XxlCrawler.Builder()
.setUrls(targetUrl)
.setAllowSpread(false)// 不允許擴(kuò)散爬取
.setThreadCount(3)
.setPauseMillis(3000)
.setUserAgent(USER_AGENT)//設(shè)置user_agent
.setIfPost(false)
.setFailRetryCount(3)// 重試三次
.setTimeoutMillis(1000 * 12)//超時(shí)時(shí)間,有些網(wǎng)站加載慢,一定要加這個(gè)時(shí)間
.setPageParser(new PageParser<PageVo>() {
@Override
public void parse(Document html, Element pageVoElement, PageVo pageVo) {
//System.out.println(pageVoElement);
weatherList.add(pageVo);
}
}).build();
crawler.start(true);// 啟動(dòng)
// excel工具包
weatherList.remove(0);//把第一行表頭移除掉
ExcelUtil<PageVo> util = new ExcelUtil<PageVo>(PageVo.class);
util.exportExcel(weatherList, year + "年" + month + "月天氣情況表");
System.out.println("finished...");
}這里需要注意的是,信息抓取器,每次得到的一個(gè)tbody中的一行,即tr的數(shù)據(jù)。我們需要將所有的數(shù)據(jù)解析完成之后,統(tǒng)一存放到一個(gè)List當(dāng)中。實(shí)現(xiàn)月度的數(shù)據(jù)搜集,同時(shí)第一行是表頭數(shù)據(jù)。需要剔除。因此,在寫(xiě)入到Excel之前,要將第一行刪除,
weatherList.remove(0);//把第一行表頭移除掉
三、信息抓取調(diào)試以及可能的問(wèn)題
這里分享實(shí)際的信息獲取結(jié)果,對(duì)抓取的信息進(jìn)行綜合展示。同時(shí)這里簡(jiǎn)單分享在信息獲取過(guò)程中可能遇到的問(wèn)題和解決方案。
1、信息獲取成果
將上述代碼運(yùn)行后,可以在控制中看到以下輸出信息:
http://www.tianqihoubao.com/lishi/changsha/month/202309.html 09:42:29.027 [main] INFO com.xuxueli.crawler.rundata.strategy.LocalRunData - >>>>>>>>>>> xxl-crawler addUrl success, link: http://www.tianqihoubao.com/lishi/changsha/month/202309.html 09:42:29.035 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler start ... 09:42:29.038 [pool-1-thread-1] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler, process link : http://www.tianqihoubao.com/lishi/changsha/month/202309.html 09:42:33.634 [pool-1-thread-1] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler is finished. 09:42:33.635 [pool-1-thread-2] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted. 09:42:33.635 [pool-1-thread-3] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted. 09:42:33.635 [pool-1-thread-1] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler stop. 09:42:33.636 [pool-1-thread-1] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted. finished...
這里提示,信息抓取完成,同時(shí)我們將數(shù)據(jù)寫(xiě)入到了Excel當(dāng)中,找到目標(biāo)文件夾,來(lái)看一下實(shí)際的效果。
| 日期 | 天氣狀況 | 最低氣溫/最高氣溫 | 風(fēng)力風(fēng)向(夜間/白天) |
| 2024年04月01日 | 小雨 /大雨 | 20℃ / 26℃ | 東南風(fēng) 1-3級(jí) /南風(fēng) 1-3級(jí) |
| 2024年04月02日 | 大雨 /小雨 | 16℃ / 26℃ | 西風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月03日 | 中雨 /小雨 | 15℃ / 18℃ | 北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月04日 | 中雨 /小雨 | 13℃ / 15℃ | 西北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月05日 | 小雨 /小雨 | 13℃ / 16℃ | 西北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月06日 | 小雨 /小雨 | 14℃ / 16℃ | 北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月07日 | 小雨 /小雨 | 14℃ / 19℃ | 北風(fēng) 1-3級(jí) /西北風(fēng) 1-3級(jí) |
| 2024年04月08日 | 多云 /多云 | 15℃ / 24℃ | 北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月09日 | 多云 /小雨 | 15℃ / 23℃ | 東北風(fēng) 1-3級(jí) /東風(fēng) 1-3級(jí) |
| 2024年04月10日 | 多云 /小雨 | 17℃ / 22℃ | 東風(fēng) 1-3級(jí) /東北風(fēng) 1-3級(jí) |
| 2024年04月11日 | 小雨 /小雨 | 18℃ / 21℃ | 北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月12日 | 陰 /小雨 | 18℃ / 25℃ | 東南風(fēng) 1-3級(jí) /東南風(fēng) 1-3級(jí) |
| 2024年04月13日 | 中雨 /小雨 | 20℃ / 26℃ | 東南風(fēng) 1-3級(jí) /南風(fēng) 1-3級(jí) |
| 2024年04月14日 | 小雨 /多云 | 20℃ / 28℃ | 東北風(fēng) 1-3級(jí) /東南風(fēng) 1-3級(jí) |
| 2024年04月15日 | 小雨 /中雨 | 21℃ / 31℃ | 南風(fēng) 1-3級(jí) /東南風(fēng) 1-3級(jí) |
| 2024年04月16日 | 暴雨 /中雨 | 20℃ / 26℃ | 西風(fēng) 1-3級(jí) /西風(fēng) 1-3級(jí) |
| 2024年04月17日 | 小雨 /陰 | 19℃ / 23℃ | 西北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月18日 | 多云 /小雨 | 19℃ / 27℃ | 東南風(fēng) 1-3級(jí) /東南風(fēng) 1-3級(jí) |
| 2024年04月19日 | 中雨 /陰 | 18℃ / 24℃ | 東南風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月20日 | 小雨 /小雨 | 19℃ / 24℃ | 北風(fēng) 1-3級(jí) /西北風(fēng) 1-3級(jí) |
| 2024年04月21日 | 陰 /多云 | 17℃ / 24℃ | 東風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月22日 | 小雨 /陰 | 19℃ / 24℃ | 西北風(fēng) 1-3級(jí) /西北風(fēng) 1-3級(jí) |
| 2024年04月23日 | 多云 /多云 | 18℃ / 27℃ | 北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
| 2024年04月24日 | 多云 /小雨 | 19℃ / 27℃ | 東北風(fēng) 1-3級(jí) /東風(fēng) 1-3級(jí) |
| 2024年04月25日 | 中雨 /多云 | 19℃ / 25℃ | 東風(fēng) 1-3級(jí) /東風(fēng) 1-3級(jí) |
| 2024年04月26日 | 多云 /多云 | 19℃ / 30℃ | 西北風(fēng) 1-3級(jí) /東南風(fēng) 1-3級(jí) |
| 2024年04月27日 | 中雨 /小雨 | 20℃ / 28℃ | 東北風(fēng) 1-3級(jí) /西南風(fēng) 1-3級(jí) |
| 2024年04月28日 | 多云 /小雨 | 20℃ / 29℃ | 北風(fēng) 1-3級(jí) /東北風(fēng) 1-3級(jí) |
| 2024年04月29日 | 中雨 /大雨 | 18℃ / 25℃ | 西風(fēng) 1-3級(jí) /西北風(fēng) 1-3級(jí) |
| 2024年04月30日 | 小雨 /多云 | 14℃ / 18℃ | 北風(fēng) 1-3級(jí) /北風(fēng) 1-3級(jí) |
大家可以對(duì)比原來(lái)的網(wǎng)頁(yè)地址,可以看到表格獲取的信息與網(wǎng)頁(yè)一致。這里的實(shí)例僅提供一個(gè)例子,拋磚引玉,大家可以結(jié)合自己的實(shí)際工作。獲取更多的天氣信息。
2、關(guān)于超時(shí)的問(wèn)題
XxlCrawler的默認(rèn)超時(shí)時(shí)間是5秒(5000ms),即5秒鐘內(nèi)數(shù)據(jù)沒(méi)有返回則超時(shí)。其定義如下:
private volatile int timeoutMillis = XxlCrawlerConf.TIMEOUT_MILLIS_DEFAULT; // 超時(shí)時(shí)間,毫秒 // timeout default, ms public static final int TIMEOUT_MILLIS_DEFAULT = 5*1000;
在默認(rèn)的情況下,頁(yè)面經(jīng)常超時(shí),請(qǐng)求時(shí)會(huì)報(bào)以下的錯(cuò)誤:
http://www.tianqihoubao.com/lishi/changsha/month/202404.html 11:03:27.685 [main] INFO com.xuxueli.crawler.rundata.strategy.LocalRunData - >>>>>>>>>>> xxl-crawler addUrl success, link: http://www.tianqihoubao.com/lishi/changsha/month/202404.html 11:03:27.693 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler start ... 11:03:27.695 [pool-1-thread-2] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler, process link : http://www.tianqihoubao.com/lishi/changsha/month/202404.html 11:03:32.697 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler still running ... 11:03:33.456 [pool-1-thread-2] ERROR com.xuxueli.crawler.util.JsoupUtil - Read timeout java.net.SocketTimeoutException: Read timeout at org.jsoup.internal.ConstrainableInputStream.read(ConstrainableInputStream.java:58) at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.read1(Unknown Source) at java.io.BufferedReader.read(Unknown Source) at org.jsoup.parser.CharacterReader.bufferUp(CharacterReader.java:87) at org.jsoup.parser.CharacterReader.current(CharacterReader.java:246) at org.jsoup.parser.TokeniserState$1.read(TokeniserState.java:12) at org.jsoup.parser.Tokeniser.read(Tokeniser.java:62) at org.jsoup.parser.TreeBuilder.runParser(TreeBuilder.java:86) at org.jsoup.parser.TreeBuilder.parse(TreeBuilder.java:61) at org.jsoup.parser.Parser.parseInput(Parser.java:51) at org.jsoup.helper.DataUtil.parseInputStream(DataUtil.java:218) at org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:962) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:355) at com.xuxueli.crawler.util.JsoupUtil.load(JsoupUtil.java:77) at com.xuxueli.crawler.loader.strategy.JsoupPageLoader.load(JsoupPageLoader.java:17) at com.xuxueli.crawler.thread.CrawlerThread.processPage(CrawlerThread.java:167) at com.xuxueli.crawler.thread.CrawlerThread.run(CrawlerThread.java:84) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
在網(wǎng)頁(yè)中驗(yàn)證以下請(qǐng)求時(shí)間,請(qǐng)注意打開(kāi)F12進(jìn)行頁(yè)面請(qǐng)求的時(shí)間跟蹤:

可以看到頁(yè)面 ,頁(yè)面加載大約花了11.93秒,接近12秒。因此其默認(rèn)的5秒超時(shí)設(shè)置是不夠的。具體的響應(yīng)時(shí)間,請(qǐng)按照大家的實(shí)際情況合理設(shè)置。把超時(shí)時(shí)間延長(zhǎng)后,就不會(huì)出現(xiàn)這個(gè)錯(cuò)誤了。
四、總結(jié)
以上就是本文的主要內(nèi)容,本文主要講解使用Java開(kāi)發(fā)語(yǔ)言,使用XxlCrawler框架進(jìn)行智能的某城市月度天氣抓取實(shí)踐開(kāi)發(fā)。文章首先介紹目標(biāo)網(wǎng)站的相關(guān)頁(yè)面及目標(biāo)數(shù)據(jù)的元素,然后講解在信息獲取過(guò)程的一些參數(shù)配置以及問(wèn)題應(yīng)對(duì),最后結(jié)合實(shí)際代碼實(shí)際抓取一個(gè)城市(以長(zhǎng)沙為例)某月度天氣數(shù)據(jù)。通過(guò)本文,您可以更加了解XxlCrawler的具體使用,知道如何解決頁(yè)面返回慢的情況下如何通過(guò)超時(shí)參數(shù)來(lái)控制數(shù)據(jù)返回的問(wèn)題,如果您是氣象人,需要?dú)庀髷?shù)據(jù),則可以通過(guò)本文來(lái)獲取想研究的地域的歷史天氣數(shù)據(jù)。行文倉(cāng)促,定有不足之處,歡迎各位專(zhuān)家朋友在評(píng)論區(qū)中批評(píng)指正,萬(wàn)分榮幸。技術(shù)人通過(guò)自己的技術(shù)來(lái)解決一點(diǎn)生活問(wèn)題,技術(shù)讓生活更美好。
以上就是基于Java和XxlCrawler獲取各城市月度天氣情況實(shí)踐分享的詳細(xì)內(nèi)容,更多關(guān)于Java XxlCrawler獲取天氣情況的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java后臺(tái)調(diào)用接口及處理跨域問(wèn)題的解決
這篇文章主要介紹了java后臺(tái)調(diào)用接口,處理跨域的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases
這篇文章主要介紹了Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringData JPA審計(jì)功能(@CreatedDate與@LastModifiedDate)實(shí)現(xiàn)
Spring Data JPA的審計(jì)功能提供了一種強(qiáng)大而靈活的機(jī)制,用于自動(dòng)跟蹤實(shí)體的創(chuàng)建和修改信息,通過(guò)使用@CreatedDate和@LastModifiedDate注解,開(kāi)發(fā)者可以輕松地實(shí)現(xiàn)時(shí)間審計(jì),感興趣的可以了解一下2025-04-04
完美解決gson將Integer默認(rèn)轉(zhuǎn)換成Double的問(wèn)題
下面小編就為大家?guī)?lái)一篇完美解決gson將Integer默認(rèn)轉(zhuǎn)換成Double的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Java的idea連接mongodb數(shù)據(jù)庫(kù)的詳細(xì)教程
這篇文章主要介紹了Java的idea連接mongodb數(shù)據(jù)庫(kù)的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
基于SpringBoot bootstrap.yml配置未生效的解決
這篇文章主要介紹了基于SpringBoot bootstrap.yml配置未生效的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn)代碼
這篇文章主要介紹了mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn),結(jié)合了mybatis-plus的插件方式,做出了自己的注解方式的數(shù)據(jù)權(quán)限,雖然可能存在一部分的局限性,但很好的解決了我們自己去解析SQL的功能,需要的朋友可以參考下2023-06-06

