欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Thrift使用樣例代碼

目錄:

  • 概述
  • 下載配置
  • 基本概念
    1. 數據類(lèi)型
    2. 服務(wù)端編碼基本步驟
    3. 客戶(hù)端編碼基本步驟
    4. 數據傳輸協(xié)議
  • 實(shí)例演示(java)
    1.  thrift生成代碼
    2.  實(shí)現接口Iface
    3. TSimpleServer服務(wù)模型
    4. TThreadPoolServer 服務(wù)模型
    5. TNonblockingServer 服務(wù)模型
    6. THsHaServer服務(wù)模型
    7. 異步客戶(hù)端

[一]、概述

Thrift是一個(gè)軟件框架,用來(lái)進(jìn)行可擴展且跨語(yǔ)言的服務(wù)的開(kāi)發(fā)。它結合了功能強大的軟件堆棧和代碼生成引擎,以構建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等編程語(yǔ)言間無(wú)縫結合的、高效的服務(wù)。

Thrift最初由facebook開(kāi)發(fā),07年四月開(kāi)放源碼,08年5月進(jìn)入apache孵化器。thrift允許你定義一個(gè)簡(jiǎn)單的定義文件中的數據類(lèi)型和服務(wù)接口。以作為輸入文件,編譯器生成代碼用來(lái)方便地生成RPC客戶(hù)端和服務(wù)器通信的無(wú)縫跨編程語(yǔ)言。

官網(wǎng)地址:thrift.apache.org

推薦值得一看的文章:

[二]、下載配置

到官網(wǎng)下載最新版本,截止今日(2012-06-11)最新版本為0.8.0.

1. 如果是Maven構建項目的,直接在pom.xml 中添加如下內容:

1<dependency>
2  <groupId>org.apache.thrift</groupId>
3  <artifactId>libthrift</artifactId>
4  <version>0.8.0</version>
5</dependency>

2.如果自己編譯lib包,把下載的壓縮包解壓到X:盤(pán),然后在X:\thrift-0.8.0\lib\java 目錄下運行ant進(jìn)行自動(dòng)編譯,會(huì )在X:\thrift-0.8.0\lib\java\build\ 目錄下看到編譯好的lib包:libthrift-0.8.0.jar

[三]、基本概念

1.數據類(lèi)型

  • 基本類(lèi)型:
    • bool:布爾值,true 或 false,對應 Java 的 boolean
    • byte:8 位有符號整數,對應 Java 的 byte
    • i16:16 位有符號整數,對應 Java 的 short
    • i32:32 位有符號整數,對應 Java 的 int
    • i64:64 位有符號整數,對應 Java 的 long
    • double:64 位浮點(diǎn)數,對應 Java 的 double
    • string:utf-8編碼的字符串,對應 Java 的 String
  • 結構體類(lèi)型:
    • struct:定義公共的對象,類(lèi)似于 C 語(yǔ)言中的結構體定義,在 Java 中是一個(gè) JavaBean
  • 容器類(lèi)型:
    • list:對應 Java 的 ArrayList
    • set:對應 Java 的 HashSet
    • map:對應 Java 的 HashMap
  • 異常類(lèi)型:
    • exception:對應 Java 的 Exception
  • 服務(wù)類(lèi)型:
    • service:對應服務(wù)的類(lèi)

2.服務(wù)端編碼基本步驟:

  • 實(shí)現服務(wù)處理接口impl
  • 創(chuàng )建TProcessor
  • 創(chuàng )建TServerTransport
  • 創(chuàng )建TProtocol
  • 創(chuàng )建TServer
  • 啟動(dòng)Server

3.客戶(hù)端編碼基本步驟:

  • 創(chuàng )建Transport
  • 創(chuàng )建TProtocol
  • 基于TTransport和TProtocol創(chuàng )建 Client
  • 調用Client的相應方法

4.數據傳輸協(xié)議

  • TBinaryProtocol : 二進(jìn)制格式.
  • TCompactProtocol : 壓縮格式
  • TJSONProtocol : JSON格式
  • TSimpleJSONProtocol : 提供JSON只寫(xiě)協(xié)議, 生成的文件很容易通過(guò)腳本語(yǔ)言解析

tips:客戶(hù)端和服務(wù)端的協(xié)議要一致

[四]、實(shí)例演示

1. thrift生成代碼

創(chuàng )建Thrift文件:G:\test\thrift\demoHello.thrift ,內容如下:

1namespace java com.micmiu.thrift.demo
2 
3service  HelloWorldService {
4  string sayHello(1:string username)
5}

目錄結構如下:

G:\test\thrift>tree /F卷 other 的文件夾 PATH 列表卷序列號為 D238-BE47G:.    demoHello.thrift    demouser.thrift    thrift-0.8.0.exe沒(méi)有子文件夾

thrift-0.8.0.exe 是官網(wǎng)提供的windows下編譯工具,運用這個(gè)工具生成相關(guān)代碼:

1thrift-0.8.0.exe -r -gen java ./demoHello.thrift

生成后的目錄結構如下:

G:\test\thrift>tree /F卷 other 的文件夾 PATH 列表卷序列號為 D238-BE47G:.│  demoHello.thrift│  demouser.thrift│  thrift-0.8.0.exe│└─gen-java    └─com        └─micmiu            └─thrift                └─demo                        HelloWorldService.java

將生成的HelloWorldService.java 文件copy到自己測試的工程中,我的工程是用maven構建的,故在pom.xml中增加如下內容:

1<dependency>
2    <groupId>org.apache.thrift</groupId>
3    <artifactId>libthrift</artifactId>
4    <version>0.8.0</version>
5</dependency>
6<dependency>
7    <groupId>org.slf4j</groupId>
8    <artifactId>slf4j-log4j12</artifactId>
9    <version>1.5.8</version>
10</dependency>

2. 實(shí)現接口Iface

java代碼:HelloWorldImpl.java

1package com.micmiu.thrift.demo;
2 
3import org.apache.thrift.TException;
4 
5/**
7 *
8 * @author Michael
9 *
10 */
11public class HelloWorldImpl implements HelloWorldService.Iface {
12 
13    public HelloWorldImpl() {
14    }
15 
16    @Override
17    public String sayHello(String username) throws TException {
18        return "Hi," + username + " welcome to my blog www.micmiu.com";
19    }
20 
21}

3.TSimpleServer服務(wù)端

簡(jiǎn)單的單線(xiàn)程服務(wù)模型,一般用于測試。

編寫(xiě)服務(wù)端server代碼:HelloServerDemo.java

1package com.micmiu.thrift.demo;
2 
3import org.apache.thrift.TProcessor;
4import org.apache.thrift.protocol.TBinaryProtocol;
5import org.apache.thrift.protocol.TCompactProtocol;
6import org.apache.thrift.protocol.TJSONProtocol;
7import org.apache.thrift.protocol.TSimpleJSONProtocol;
8import org.apache.thrift.server.TServer;
9import org.apache.thrift.server.TSimpleServer;
10import org.apache.thrift.transport.TServerSocket;
11 
12/**
14 *
15 * @author Michael
16 *
17 */
18public class HelloServerDemo {
19    public static final int SERVER_PORT = 8090;
20 
21    public void startServer() {
22        try {
23            System.out.println("HelloWorld TSimpleServer start ....");
24 
25            TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
26                    new HelloWorldImpl());
27            // HelloWorldService.Processor<HelloWorldService.Iface> tprocessor =
28            // new HelloWorldService.Processor<HelloWorldService.Iface>(
29            // new HelloWorldImpl());
30 
31            // 簡(jiǎn)單的單線(xiàn)程服務(wù)模型,一般用于測試
32            TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
33            TServer.Args tArgs = new TServer.Args(serverTransport);
34            tArgs.processor(tprocessor);
35            tArgs.protocolFactory(new TBinaryProtocol.Factory());
36            // tArgs.protocolFactory(new TCompactProtocol.Factory());
37            // tArgs.protocolFactory(new TJSONProtocol.Factory());
38            TServer server = new TSimpleServer(tArgs);
39            server.serve();
40 
41        } catch (Exception e) {
42            System.out.println("Server start error!!!");
43            e.printStackTrace();
44        }
45    }
46 
47    /**
48     * @param args
49     */
50    public static void main(String[] args) {
51        HelloServerDemo server = new HelloServerDemo();
52        server.startServer();
53    }
54 
55}

編寫(xiě)客戶(hù)端Client代碼:HelloClientDemo.java

1package com.micmiu.thrift.demo;
2 
3import org.apache.thrift.TException;
4import org.apache.thrift.protocol.TBinaryProtocol;
5import org.apache.thrift.protocol.TCompactProtocol;
6import org.apache.thrift.protocol.TJSONProtocol;
7import org.apache.thrift.protocol.TProtocol;
8import org.apache.thrift.transport.TSocket;
9import org.apache.thrift.transport.TTransport;
10import org.apache.thrift.transport.TTransportException;
11 
12/**
14 *
15 * @author Michael
16 *
17 */
18public class HelloClientDemo {
19 
20    public static final String SERVER_IP = "localhost";
21    public static final int SERVER_PORT = 8090;
22    public static final int TIMEOUT = 30000;
23 
24    /**
25     *
26     * @param userName
27     */
28    public void startClient(String userName) {
29        TTransport transport = null;
30        try {
31            transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
32            // 協(xié)議要和服務(wù)端一致
33            TProtocol protocol = new TBinaryProtocol(transport);
34            // TProtocol protocol = new TCompactProtocol(transport);
35            // TProtocol protocol = new TJSONProtocol(transport);
36            HelloWorldService.Client client = new HelloWorldService.Client(
37                    protocol);
38            transport.open();
39            String result = client.sayHello(userName);
40            System.out.println("Thrify client result =: " + result);
41        } catch (TTransportException e) {
42            e.printStackTrace();
43        } catch (TException e) {
44            e.printStackTrace();
45        } finally {
46            if (null != transport) {
47                transport.close();
48            }
49        }
50    }
51 
52    /**
53     * @param args
54     */
55    public static void main(String[] args) {
56        HelloClientDemo client = new HelloClientDemo();
57        client.startClient("Michael");
58 
59    }
60 
61}

先運行服務(wù)端程序,日志如下:

HelloWorld TSimpleServer start ....

再運行客戶(hù)端調用程序,日志如下:

Thrify client result =: Hi,Michael welcome to my blog www.micmiu.com

測試成功,和預期的返回信息一致。

4.TThreadPoolServer 服務(wù)模型

線(xiàn)程池服務(wù)模型,使用標準的阻塞式IO,預先創(chuàng )建一組線(xiàn)程處理請求。

編寫(xiě)服務(wù)端代碼:HelloServerDemo.java

1package com.micmiu.thrift.demo;
2 
3import org.apache.thrift.TProcessor;
4import org.apache.thrift.protocol.TBinaryProtocol;
5import org.apache.thrift.server.TServer;
6import org.apache.thrift.server.TThreadPoolServer;
7import org.apache.thrift.transport.TServerSocket;
8 
9/**
11 *
12 * @author Michael
13 *
14 */
15public class HelloServerDemo {
16    public static final int SERVER_PORT = 8090;
17 
18    public void startServer() {
19        try {
20            System.out.println("HelloWorld TThreadPoolServer start ....");
21 
22            TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
23                    new HelloWorldImpl());
24 
25             TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
26             TThreadPoolServer.Args ttpsArgs = new TThreadPoolServer.Args(
27             serverTransport);
28             ttpsArgs.processor(tprocessor);
29             ttpsArgs.protocolFactory(new TBinaryProtocol.Factory());
30 
31            // 線(xiàn)程池服務(wù)模型,使用標準的阻塞式IO,預先創(chuàng )建一組線(xiàn)程處理請求。
32             TServer server = new TThreadPoolServer(ttpsArgs);
33             server.serve();
34 
35        } catch (Exception e) {
36            System.out.println("Server start error!!!");
37            e.printStackTrace();
38        }
39    }
40 
41    /**
42     * @param args
43     */
44    public static void main(String[] args) {
45        HelloServerDemo server = new HelloServerDemo();
46        server.startServer();
47    }
48 
49}

客戶(hù)端Client代碼和之前的一樣,只要數據傳輸的協(xié)議一致即可,客戶(hù)端測試成功,結果如下:

Thrify client result =: Hi,Michael welcome to my blog www.micmiu.com

5.TNonblockingServer 服務(wù)模型

使用非阻塞式IO,服務(wù)端和客戶(hù)端需要指定 TFramedTransport 數據傳輸的方式。

編寫(xiě)服務(wù)端代碼:HelloServerDemo.java

1package com.micmiu.thrift.demo;
2 
3import org.apache.thrift.TProcessor;
4import org.apache.thrift.protocol.TCompactProtocol;
5import org.apache.thrift.server.TNonblockingServer;
6import org.apache.thrift.server.TServer;
7import org.apache.thrift.transport.TFramedTransport;
8import org.apache.thrift.transport.TNonblockingServerSocket;
9 
10/**
12 *
13 * @author Michael
14 *
15 */
16public class HelloServerDemo {
17    public static final int SERVER_PORT = 8090;
18 
19    public void startServer() {
20        try {
21            System.out.println("HelloWorld TNonblockingServer start ....");
22 
23            TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
24                    new HelloWorldImpl());
25 
26            TNonblockingServerSocket tnbSocketTransport = new TNonblockingServerSocket(
27                    SERVER_PORT);
28            TNonblockingServer.Args tnbArgs = new TNonblockingServer.Args(
29                    tnbSocketTransport);
30            tnbArgs.processor(tprocessor);
31            tnbArgs.transportFactory(new TFramedTransport.Factory());
32            tnbArgs.protocolFactory(new TCompactProtocol.Factory());
33 
34            // 使用非阻塞式IO,服務(wù)端和客戶(hù)端需要指定TFramedTransport數據傳輸的方式
35            TServer server = new TNonblockingServer(tnbArgs);
36            server.serve();
37 
38        } catch (Exception e) {
39            System.out.println("Server start error!!!");
40            e.printStackTrace();
41        }
42    }
43 
44    /**
45     * @param args
46     */
47    public static void main(String[] args) {
48        HelloServerDemo server = new HelloServerDemo();
49        server.startServer();
50    }
51 
52}

編寫(xiě)客戶(hù)端代碼:HelloClientDemo.java

1package com.micmiu.thrift.demo;
2 
3import org.apache.thrift.TException;
4import org.apache.thrift.protocol.TCompactProtocol;
5import org.apache.thrift.protocol.TProtocol;
6import org.apache.thrift.transport.TFramedTransport;
7import org.apache.thrift.transport.TSocket;
8import org.apache.thrift.transport.TTransport;
9import org.apache.thrift.transport.TTransportException;
10 
11/**
13 *
14 * @author Michael
15 *
16 */
17public class HelloClientDemo {
18 
19    public static final String SERVER_IP = "localhost";
20    public static final int SERVER_PORT = 8090;
21    public static final int TIMEOUT = 30000;
22 
23    /**
24     *
25     * @param userName
26     */
27    public void startClient(String userName) {
28        TTransport transport = null;
29        try {
30            transport = new TFramedTransport(new TSocket(SERVER_IP,
31                    SERVER_PORT, TIMEOUT));
32            // 協(xié)議要和服務(wù)端一致
33            TProtocol protocol = new TCompactProtocol(transport);
34            HelloWorldService.Client client = new HelloWorldService.Client(
35                    protocol);
36            transport.open();
37            String result = client.sayHello(userName);
38            System.out.println("Thrify client result =: " + result);
39        } catch (TTransportException e) {
40            e.printStackTrace();
41        } catch (TException e) {
42            e.printStackTrace();
43        } finally {
44            if (null != transport) {
45                transport.close();
46            }
47        }
48    }
49 
50    /**
51     * @param args
52     */
53    public static void main(String[] args) {
54        HelloClientDemo client = new HelloClientDemo();
55        client.startClient("Michael");
56 
57    }
58 
59}

客戶(hù)端的測試成功,結果如下:

Thrify client result =: Hi,Michael welcome to my blog www.micmiu.com

6.THsHaServer服務(wù)模型

半同步半異步的服務(wù)端模型,需要指定為: TFramedTransport 數據傳輸的方式。

編寫(xiě)服務(wù)端代碼:HelloServerDemo.java

1package com.micmiu.thrift.demo;
2 
3import org.apache.thrift.TProcessor;
4import org.apache.thrift.protocol.TBinaryProtocol;
5import org.apache.thrift.protocol.TCompactProtocol;
6import org.apache.thrift.server.THsHaServer;
7import org.apache.thrift.server.TNonblockingServer;
8import org.apache.thrift.server.TServer;
9import org.apache.thrift.server.TSimpleServer;
10import org.apache.thrift.server.TThreadPoolServer;
11import org.apache.thrift.transport.TFramedTransport;
12import org.apache.thrift.transport.TNonblockingServerSocket;
13import org.apache.thrift.transport.TServerSocket;
14 
15/**
17 *
18 * @author Michael
19 *
20 */
21public class HelloServerDemo {
22    public static final int SERVER_PORT = 8090;
23 
24    public void startServer() {
25        try {
26            System.out.println("HelloWorld THsHaServer start ....");
27 
28            TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
29                    new HelloWorldImpl());
30 
31            TNonblockingServerSocket tnbSocketTransport = new TNonblockingServerSocket(
32                    SERVER_PORT);
33            THsHaServer.Args thhsArgs = new THsHaServer.Args(tnbSocketTransport);
34            thhsArgs.processor(tprocessor);
35            thhsArgs.transportFactory(new TFramedTransport.Factory());
36            thhsArgs.protocolFactory(new TBinaryProtocol.Factory());
37 
38            //半同步半異步的服務(wù)模型
39            TServer server = new THsHaServer(thhsArgs);
40            server.serve();
41 
42        } catch (Exception e) {
43            System.out.println("Server start error!!!");
44            e.printStackTrace();
45        }
46    }
47 
48    /**
49     * @param args
50     */
51    public static void main(String[] args) {
52        HelloServerDemo server = new HelloServerDemo();
53        server.startServer();
54    }
55 
56}

客戶(hù)端代碼和上面 4 中的類(lèi)似,只要注意傳輸協(xié)議一致以及指定傳輸方式為TFramedTransport。

7.異步客戶(hù)端

編寫(xiě)服務(wù)端代碼:HelloServerDemo.java

1package com.micmiu.thrift.demo;
2 
3import org.apache.thrift.TProcessor;
4import org.apache.thrift.protocol.TCompactProtocol;
5import org.apache.thrift.server.TNonblockingServer;
6import org.apache.thrift.server.TServer;
7import org.apache.thrift.transport.TFramedTransport;
8import org.apache.thrift.transport.TNonblockingServerSocket;
9 
10/**
12 *
13 * @author Michael
14 *
15 */
16public class HelloServerDemo {
17    public static final int SERVER_PORT = 8090;
18 
19    public void startServer() {
20        try {
21            System.out.println("HelloWorld TNonblockingServer start ....");
22 
23            TProcessor tprocessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
24                    new HelloWorldImpl());
25 
26            TNonblockingServerSocket tnbSocketTransport = new TNonblockingServerSocket(
27                    SERVER_PORT);
28            TNonblockingServer.Args tnbArgs = new TNonblockingServer.Args(
29                    tnbSocketTransport);
30            tnbArgs.processor(tprocessor);
31            tnbArgs.transportFactory(new TFramedTransport.Factory());
32            tnbArgs.protocolFactory(new TCompactProtocol.Factory());
33 
34            // 使用非阻塞式IO,服務(wù)端和客戶(hù)端需要指定TFramedTransport數據傳輸的方式
35            TServer server = new TNonblockingServer(tnbArgs);
36            server.serve();
37 
38        } catch (Exception e) {
39            System.out.println("Server start error!!!");
40            e.printStackTrace();
41        }
42    }
43 
44    /**
45     * @param args
46     */
47    public static void main(String[] args) {
48        HelloServerDemo server = new HelloServerDemo();
49        server.startServer();
50    }
51 
52}

編寫(xiě)客戶(hù)端Client代碼:HelloAsynClientDemo.java

1package com.micmiu.thrift.demo;
2 
3import java.util.concurrent.CountDownLatch;
4import java.util.concurrent.TimeUnit;
5 
6import org.apache.thrift.TException;
7import org.apache.thrift.async.AsyncMethodCallback;
8import org.apache.thrift.async.TAsyncClientManager;
9import org.apache.thrift.protocol.TCompactProtocol;
10import org.apache.thrift.protocol.TProtocolFactory;
11import org.apache.thrift.transport.TNonblockingSocket;
12import org.apache.thrift.transport.TNonblockingTransport;
13 
14import com.micmiu.thrift.demo.HelloWorldService.AsyncClient.sayHello_call;
15 
16/**
18 *
19 * @author Michael
20 *
21 */
22public class HelloAsynClientDemo {
23 
24    public static final String SERVER_IP = "localhost";
25    public static final int SERVER_PORT = 8090;
26    public static final int TIMEOUT = 30000;
27 
28    /**
29     *
30     * @param userName
31     */
32    public void startClient(String userName) {
33        try {
34            TAsyncClientManager clientManager = new TAsyncClientManager();
35            TNonblockingTransport transport = new TNonblockingSocket(SERVER_IP,
36                    SERVER_PORT, TIMEOUT);
37 
38            TProtocolFactory tprotocol = new TCompactProtocol.Factory();
39            HelloWorldService.AsyncClient asyncClient = new HelloWorldService.AsyncClient(
40                    tprotocol, clientManager, transport);
41            System.out.println("Client start .....");
42 
43            CountDownLatch latch = new CountDownLatch(1);
44            AsynCallback callBack = new AsynCallback(latch);
45            System.out.println("call method sayHello start ...");
46            asyncClient.sayHello(userName, callBack);
47            System.out.println("call method sayHello .... end");
48            boolean wait = latch.await(30, TimeUnit.SECONDS);
49            System.out.println("latch.await =:" + wait);
50        } catch (Exception e) {
51            e.printStackTrace();
52        }
53        System.out.println("startClient end.");
54    }
55 
56    public class AsynCallback implements AsyncMethodCallback<sayHello_call> {
57        private CountDownLatch latch;
58 
59        public AsynCallback(CountDownLatch latch) {
60            this.latch = latch;
61        }
62 
63        @Override
64        public void onComplete(sayHello_call response) {
65            System.out.println("onComplete");
66            try {
67                // Thread.sleep(1000L * 1);
68                System.out.println("AsynCall result =:"
69                        + response.getResult().toString());
70            } catch (TException e) {
71                e.printStackTrace();
72            } catch (Exception e) {
73                e.printStackTrace();
74            } finally {
75                latch.countDown();
76            }
77        }
78 
79        @Override
80        public void onError(Exception exception) {
81            System.out.println("onError :" + exception.getMessage());
82            latch.countDown();
83        }
84    }
85 
86    /**
87     * @param args
88     */
89    public static void main(String[] args) {
90        HelloAsynClientDemo client = new HelloAsynClientDemo();
91        client.startClient("Michael");
92 
93    }
94 
95}

先運行服務(wù)程序,再運行客戶(hù)端程序,測試結果如下:

Client start .....call method sayHello start ...call method sayHello .... endonCompleteAsynCall result =:Hi,Michael welcome to my blog www.micmiu.comlatch.await =:truestartClient end.
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
windows配置thrift開(kāi)發(fā)環(huán)境
Apache Thrift學(xué)習小記
Thrift安裝和應用(C#)
啟動(dòng)Tomcat和Jetty的另外一種方式
Apache Thrift 支持異構語(yǔ)言之間的調用
cassandra(三)--編寫(xiě)java代碼對分布式數據庫進(jìn)行操作 - Java綜合 - Java - JavaEye論壇
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久