真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java訂單代碼實(shí)現(xiàn) java生成訂單

java一個(gè)訂單接口,調(diào)用訂單接口要?jiǎng)?chuàng)建10000份訂單,用多線程怎么實(shí)現(xiàn),求助大神!?。。。?/h2>

public?class?MyThread?extends?Thread{??

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、于都ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的于都網(wǎng)站制作公司

//重寫run方法,run方法的方法體就是現(xiàn)場(chǎng)執(zhí)行體??

public?void?run()??

{??

System.out.println("創(chuàng)建訂單");?

}??

}??

public?class?Test?{

public?static?void?main(String[]?args)??

{??

new?MyThread?().start();?//開啟一個(gè)線程??

new?MyThread?().start();?//開啟一個(gè)線程

}??

}

生成訂單編號(hào) 用java怎么處理

/**

* 得到一個(gè)新的訂單代碼

* 說明,此函數(shù)還沒有進(jìn)行過多線程測(cè)試,更新數(shù)據(jù)庫(kù)時(shí)未加鎖

* @return 新的訂單代碼

*/

public String getOrderCode(){

//getParameter這個(gè)方法就是從數(shù)據(jù)庫(kù)取2個(gè)參數(shù)的值 ORDER_CODE_DATE 和

//ORDER_CODE_NO是數(shù)據(jù)庫(kù)字段名

BasParameters orderCodeDate = getParameter(ORDER_CODE_DATE);

BasParameters orderCodeNo = getParameter(ORDER_CODE_NO);

//當(dāng)前日期

String currDate=new SimpleDateFormat("yyyyMMdd").format(new Date(System.currentTimeMillis()));

//每天的起始數(shù)

int orderNo = 100;

//表里存的日期和當(dāng)前日期相同,順序號(hào)累加

if (currDate.equals(orderCodeDate.getValue())){

orderCodeNo.setValue(""+(Integer.parseInt(orderCodeNo.getValue())+1));

orderNo = (Integer.parseInt(orderCodeNo.getValue()));

//save 就是保存ORDER_CODE_DATE 和 ORDER_CODE_NO當(dāng)前值到數(shù)據(jù)庫(kù)

save(orderCodeNo);

} else {

//表里存的日期和當(dāng)前日期不同,順序號(hào)重新開始,更新參數(shù)表的日期

orderCodeDate.setValue(currDate);

save(orderCodeDate);

orderCodeNo.setValue(orderNo);

save(orderCodeNo);

}

return currDate + new DecimalFormat("000000").format(orderNo);

}

使用java語(yǔ)言爬取自己的淘寶訂單看看買了哪些東西?

Java爬蟲框架WebMagic簡(jiǎn)介及使用

一、介紹

webmagic的是一個(gè)無須配置、便于二次開發(fā)的爬蟲框架,它提供簡(jiǎn)單靈活的API,只需少量代碼即可實(shí)現(xiàn)一個(gè)爬蟲。webmagic采用完全模塊化的設(shè)計(jì),功能覆蓋整個(gè)爬蟲的生命周期(鏈接提取、頁(yè)面下載、內(nèi)容抽取、持久化),支持多線程抓取,分布式抓取,并支持自動(dòng)重試、自定義UA/cookie等功能。

二、概覽

WebMagic項(xiàng)目代碼分為核心和擴(kuò)展兩部分。核心部分(webmagic-core)是一個(gè)精簡(jiǎn)的、模塊化的爬蟲實(shí)現(xiàn),而擴(kuò)展部分則包括一些便利的、實(shí)用性的功能(例如注解模式編寫爬蟲等)。

WebMagic的結(jié)構(gòu)分為Downloader、PageProcessor、Scheduler、Pipeline四大組件,并由Spider將它們彼此組織起來。這四大組件對(duì)應(yīng)爬蟲生命周期中的下載、處理、管理和持久化等功能。而Spider則將這幾個(gè)組件組織起來,讓它們可以互相交互,流程化的執(zhí)行,可以認(rèn)為Spider是一個(gè)大的容器,它也是WebMagic邏輯的核心。

2.1 WebMagic的四個(gè)組件

Downloader

Downloader負(fù)責(zé)從互聯(lián)網(wǎng)上下載頁(yè)面,以便后續(xù)處理。WebMagic默認(rèn)使用了Apache HttpClient作為下載工具。

PageProcessor

PageProcessor負(fù)責(zé)解析頁(yè)面,抽取有用信息,以及發(fā)現(xiàn)新的鏈接。WebMagic使用Jsoup作為HTML解析工具,并基于其開發(fā)了解析XPath的工具Xsoup。在這四個(gè)組件中,PageProcessor對(duì)于每個(gè)站點(diǎn)每個(gè)頁(yè)面都不一樣,是需要使用者定制的部分。

Scheduler

Scheduler負(fù)責(zé)管理待抓取的URL,以及一些去重的工作。WebMagic默認(rèn)提供了JDK的內(nèi)存隊(duì)列來管理URL,并用集合來進(jìn)行去重。也支持使用Redis進(jìn)行分布式管理。除非項(xiàng)目有一些特殊的分布式需求,否則無需自己定制Scheduler。

Pipeline

Pipeline負(fù)責(zé)抽取結(jié)果的處理,包括計(jì)算、持久化到文件、數(shù)據(jù)庫(kù)等。WebMagic默認(rèn)提供了“輸出到控制臺(tái)”和“保存到文件”兩種結(jié)果處理方案。Pipeline定義了結(jié)果保存的方式,如果你要保存到指定數(shù)據(jù)庫(kù),則需要編寫對(duì)應(yīng)的Pipeline。對(duì)于一類需求一般只需編寫一個(gè)Pipeline。

2.2 用于數(shù)據(jù)流轉(zhuǎn)的對(duì)象

Request

Request是對(duì)URL地址的一層封裝,一個(gè)Request對(duì)應(yīng)一個(gè)URL地址。它是PageProcessor與Downloader交互的載體,也是PageProcessor控制Downloader唯一方式。

Page

Page代表了從Downloader下載到的一個(gè)頁(yè)面——可能是HTML,也可能是JSON或者其他文本格式的內(nèi)容。Page是WebMagic抽取過程的核心對(duì)象,它提供一些方法可供抽取、結(jié)果保存等。

ReusltItems

ReusltItems相當(dāng)于一個(gè)Map,它保存PageProcessor處理的結(jié)果,供Pipeline使用。它的API與Map很類似,值得注意的是它有一個(gè)字段skip,若設(shè)置為true,則不應(yīng)被Pipeline處理。

2.3 控制爬蟲運(yùn)轉(zhuǎn)的引擎—Spider

Spider是WebMagic內(nèi)部流程的核心。Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一個(gè)屬性,這些屬性是可以自由設(shè)置的,通過設(shè)置這個(gè)屬性可以實(shí)現(xiàn)不同的功能。Spider也是WebMagic操作的入口,它封裝了爬蟲的創(chuàng)建、啟動(dòng)、停止、多線程等功能。

對(duì)于編寫一個(gè)爬蟲,PageProcessor是需要編寫的部分,而Spider則是創(chuàng)建和控制爬蟲的入口。

2.4 WebMagic項(xiàng)目組成

WebMagic項(xiàng)目代碼包括幾個(gè)部分,在根目錄下以不同目錄名分開。它們都是獨(dú)立的Maven項(xiàng)目。

WebMagic主要包括兩個(gè)包,這兩個(gè)包經(jīng)過廣泛實(shí)用,已經(jīng)比較成熟:

webmagic-core

webmagic-core是WebMagic核心部分,只包含爬蟲基本模塊和基本抽取器。

webmagic-extension

webmagic-extension是WebMagic的主要擴(kuò)展模塊,提供一些更方便的編寫爬蟲的工具。包括注解格式定義爬蟲、JSON、分布式等支持。

三、 基本的爬蟲

3.1 爬蟲的流程 (可以參考上邊的框架架構(gòu)圖)

Downloader-頁(yè)面下載

頁(yè)面下載是一切爬蟲的開始。

大部分爬蟲都是通過模擬http請(qǐng)求,接收并分析響應(yīng)來完成。這方面,JDK自帶的HttpURLConnection可以滿足最簡(jiǎn)單的需要,而Apache HttpClient(4.0后整合到HttpCompenent項(xiàng)目中)則是開發(fā)復(fù)雜爬蟲的不二之選。它支持自定義HTTP頭(對(duì)于爬蟲比較有用的就是User-agent、cookie等)、自動(dòng)redirect、連接復(fù)用、cookie保留、設(shè)置代理等諸多強(qiáng)大的功能。

webmagic使用了HttpClient 4.2,并封裝到了HttpClientDownloader。學(xué)習(xí)HttpClient的使用對(duì)于構(gòu)建高性能爬蟲是非常有幫助的,官方的Tutorial就是很好的學(xué)習(xí)資料。目前webmagic對(duì)HttpClient的使用仍在初步階段,不過對(duì)于一般抓取任務(wù),已經(jīng)夠用了

PageProcessor-頁(yè)面分析及鏈接抽取

Selector是webmagic為了簡(jiǎn)化頁(yè)面抽取開發(fā)的獨(dú)立模塊,是整個(gè)項(xiàng)目中我最得意的部分。這里整合了CSS Selector、XPath和正則表達(dá)式,并可以進(jìn)行鏈?zhǔn)降某槿?,很容易就?shí)現(xiàn)強(qiáng)大的功能。即使你使用自己開發(fā)的爬蟲工具,webmagic的Selector仍然值得一試

Jsoup

HtmlParser

Apache tika

HtmlCleaner與Xpath

這里說的頁(yè)面分析主要指HTML頁(yè)面的分析。頁(yè)面分析可以說是垂直爬蟲最復(fù)雜的一部分,在webmagic里,PageProcessor是定制爬蟲的核心。通過編寫一個(gè)實(shí)現(xiàn)PageProcessor接口的類,就可以定制一個(gè)自己的爬蟲

HTML分析是一個(gè)比較復(fù)雜的工作,Java世界主要有幾款比較方便的分析工具:

webmagic的Selector

Scheduler-URL管理

URL管理的問題可大可小。對(duì)于小規(guī)模的抓取,URL管理是很簡(jiǎn)單的。我們只需要將待抓取URL和已抓取URL分開保存,并進(jìn)行去重即可。使用JDK內(nèi)置的集合類型Set、List或者Queue都可以滿足需要。如果我們要進(jìn)行多線程抓取,則可以選擇線程安全的容器,例如LinkedBlockingQueue以及ConcurrentHashMap。因?yàn)樾∫?guī)模的URL管理非常簡(jiǎn)單,很多框架都并不將其抽象為一個(gè)模塊,而是直接融入到代碼中。但是實(shí)際上,抽象出Scheduler模塊,會(huì)使得框架的解耦程度上升一個(gè)檔次,并非常容易進(jìn)行橫向擴(kuò)展,這也是我從scrapy中學(xué)到的。

Pipeline-離線處理和持久化

Pipeline其實(shí)也是容易被忽略的一部分。大家都知道持久化的重要性,但是很多框架都選擇直接在頁(yè)面抽取的時(shí)候?qū)⒊志没黄鹜瓿?,例如crawer4j。但是Pipeline真正的好處是,將頁(yè)面的在線分析和離線處理拆分開來,可以在一些線程里進(jìn)行下載,另一些線程里進(jìn)行處理和持久化。

3.2 使用WebMagic爬取一個(gè)壁紙網(wǎng)站

首先引入WebMagic的依賴,webmagic-core-{version}.jar和webmagic-extension-{version}.jar。在項(xiàng)目中添加這兩個(gè)包的依賴,即可使用WebMagic。

maven中引入依賴jar包

dependency

groupIdus.codecraft/groupId

artifactIdwebmagic-core/artifactId

version0.5.3/version

/dependency

dependency

groupIdus.codecraft/groupId

artifactIdwebmagic-extension/artifactId

version0.5.3/version

/dependency1234567891012345678910

不使用maven的用戶,可以去中下載最新的jar包。

JAVA作業(yè)求助。

在Java中,依賴關(guān)系通常表示為一個(gè)類依賴于另一個(gè)類,因?yàn)樗枰{(diào)用另一個(gè)類的方法或構(gòu)造函數(shù)來完成它的工作。例如,假設(shè)我們有一個(gè)名為Car的類,它擁有一個(gè)名為startEngine的方法,用于啟動(dòng)汽車的發(fā)動(dòng)機(jī)。我們還有一個(gè)名為Driver的類,它有一個(gè)名為drive的方法,用于駕駛汽車。那么Driver類就依賴于Car類,因?yàn)镈river類需要調(diào)用Car類的startEngine方法來啟動(dòng)汽車。

下面是一個(gè)示例代碼,實(shí)現(xiàn)了一個(gè)依賴關(guān)系的場(chǎng)景:

=================

public class Car {

public void startEngine() {

System.out.println("Engine started.");

}

}

public class Driver {

private Car car;

public Driver(Car car) {

this.car = car;

}

public void drive() {

car.startEngine();

System.out.println("Car is being driven.");

}

}

public class Main {

public static void main(String[] args) {

Car car = new Car();

Driver driver = new Driver(car);

driver.drive();

}

}

=================

在這段代碼中,Driver類的構(gòu)造函數(shù)接收一個(gè)Car類的實(shí)例作為參數(shù),并將它保存在私有字段car中。在Driver類的drive方法中,我們首先調(diào)用了car實(shí)例的startEngine方法,然后打印一條消息,表示汽車正在被駕駛。

關(guān)聯(lián)關(guān)系通常表示為兩個(gè)類之間的關(guān)系,它們之間的關(guān)系可能是一對(duì)一,一對(duì)多或多對(duì)多。例如,假設(shè)我們有一個(gè)名為Student的類,它有一個(gè)名為enroll的方法,用于選課。我們還有一個(gè)名為Course的類,它有一個(gè)名為addStudent的方法,用于添加學(xué)生。那么Student類和Course類之間就存在一對(duì)多的關(guān)聯(lián)關(guān)系,因?yàn)橐粋€(gè)學(xué)生可以選擇多個(gè)課程,而一個(gè)課程也可以被多個(gè)學(xué)生選擇。

下面是一個(gè)示例代碼,實(shí)現(xiàn)了一個(gè)關(guān)聯(lián)關(guān)系的場(chǎng)景:

=================

public class Student {

private ListCourse courses = new ArrayList();

public void enroll(Course course) {

courses.add(course);

course.addStudent(this);

}

}

public class Course {

private ListStudent students = new ArrayList();

public void addStudent(Student student) {

students.add(student);

}

}

public class Main {

public static void main(String[] args) {

Student student = new Student();

Course course1 = new Course();

Course course2 = new Course();

student.enroll(course1);

student.enroll(course2);

}

}

=================

在這段代碼中,Student類擁有一個(gè)私有字段courses,表示學(xué)生選擇的課程。Student類的enroll方法用于選課,它接收一個(gè)Course類的實(shí)例作為參數(shù),并將它添加到courses列表中。同時(shí),enroll方法還會(huì)調(diào)用課程實(shí)例的addStudent方法,將學(xué)生添加到課程的學(xué)生列表中。

在Main類的main方法中,我們創(chuàng)建了一個(gè)學(xué)生實(shí)例和兩個(gè)課程實(shí)例。我們調(diào)用學(xué)生實(shí)例的enroll方法,將兩個(gè)課程實(shí)例添加到學(xué)生的選課列表中,同時(shí)將學(xué)生添加到兩個(gè)課程的學(xué)生列表中。這就實(shí)現(xiàn)了一對(duì)多的關(guān)聯(lián)關(guān)系。

總之,依賴關(guān)系和關(guān)聯(lián)關(guān)系都是表示兩個(gè)類之間的關(guān)系,但是它們之間的關(guān)系不同。依賴關(guān)系表示一個(gè)類依賴于另一個(gè)類,因?yàn)樗枰{(diào)用另一個(gè)類的方法或構(gòu)造函數(shù)來完成它的工作;關(guān)聯(lián)關(guān)系表示兩個(gè)類之間的關(guān)系,它們之間可能是一對(duì)一,一對(duì)多或多對(duì)多。


新聞標(biāo)題:java訂單代碼實(shí)現(xiàn) java生成訂單
文章位置:http://weahome.cn/article/ddiiiei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部