diff --git a/core/pom.xml b/core/pom.xml
index bcb98ac..bce0297 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -13,6 +13,7 @@
RELEASE
+ RELEASE
@@ -59,6 +60,12 @@
${thrift.version}
+
+ org.apache.commons
+ commons-pool2
+ ${commons-pool2.version}
+
+
core
diff --git a/core/src/main/java/core/thrift/ConnectionPoolFactory.java b/core/src/main/java/core/thrift/ConnectionPoolFactory.java
new file mode 100644
index 0000000..87b5b3c
--- /dev/null
+++ b/core/src/main/java/core/thrift/ConnectionPoolFactory.java
@@ -0,0 +1,32 @@
+package core.thrift;
+
+import org.apache.commons.pool2.BasePooledObjectFactory;
+import org.apache.commons.pool2.PooledObject;
+import org.apache.commons.pool2.impl.DefaultPooledObject;
+import org.apache.thrift.transport.TNonblockingSocket;
+import org.apache.thrift.transport.TTransport;
+
+
+public class ConnectionPoolFactory extends BasePooledObjectFactory{
+ private String ip;
+ private int port;
+ private int socketTimeout;
+
+ public ConnectionPoolFactory(String ip,int port,int socketTimeout) {
+ this.ip = ip;
+ this.port = port;
+ this.socketTimeout = socketTimeout;
+ }
+
+ @Override
+ //创建TTransport类型对象方法
+ public TTransport create() throws Exception {
+ return new TNonblockingSocket(ip, port,socketTimeout);
+ }
+
+ //把TTransport对象打包成池管理的对象PooledObject
+ @Override
+ public PooledObject wrap(TTransport transport) {
+ return new DefaultPooledObject<>(transport);
+ }
+}
diff --git a/core/src/main/java/core/thrift/MyAsyncMethodCallback.java b/core/src/main/java/core/thrift/MyAsyncMethodCallback.java
new file mode 100644
index 0000000..e68934e
--- /dev/null
+++ b/core/src/main/java/core/thrift/MyAsyncMethodCallback.java
@@ -0,0 +1,28 @@
+package core.thrift;
+
+import org.apache.thrift.async.AsyncMethodCallback;
+
+public class MyAsyncMethodCallback implements AsyncMethodCallback {
+
+ private boolean onComplete=true;
+
+ private E result;
+
+ public E getResult() throws InterruptedException {
+ while (onComplete){
+ Thread.sleep(100);
+ }
+ return result;
+ }
+
+ @Override
+ public void onComplete(E o) {
+ onComplete=false;
+ result=o;
+ }
+
+ @Override
+ public void onError(Exception e) {
+ e.printStackTrace();
+ }
+}
diff --git a/core/src/main/java/core/thrift/ThriftClientDemo.java b/core/src/main/java/core/thrift/ThriftClientDemo.java
deleted file mode 100644
index 1b11340..0000000
--- a/core/src/main/java/core/thrift/ThriftClientDemo.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package core.thrift;
-
-import core.thrift.comment.QueryComment;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.transport.TFramedTransport;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.transport.TTransport;
-
-import java.util.List;
-
-public class ThriftClientDemo {
-
- private static final String host="127.0.0.1";
- private static final int port=2233;
- private static Logger log=LogManager.getLogger();
- private static final TTransport tTransport = getTTransport(host, port, 5000);
-
- public static List commentSumList(List cids) throws Exception {
- List result= client().commentSumList(cids);
- log.info("查询结果:"+result);
- return result;
- }
-
- public static int commentSum(int cid) throws Exception {
- int result=client().commentSum(cid);
- log.info("查询结果:"+result);
- return result;
- }
-
- public static String downloadXml(List cids,String fileName) throws Exception {
- String result=client().download(cids,fileName);
- log.info("查询结果:"+result);
- return result;
- }
-
- private static QueryComment.Client client() throws Exception {
- TTransport tTransport = getTTransport();
- TProtocol protocol = new TBinaryProtocol(tTransport);
- return new QueryComment.Client(protocol);
- }
-
- public static TTransport getTTransport() throws Exception{
- try{
- if(!tTransport.isOpen()){
- tTransport.open();
- }
- return tTransport;
- }catch(Exception e){
- e.printStackTrace();
- }
- return null;
- }
- private static TTransport getTTransport(String host, int port, int timeout) {
- final TSocket tSocket = new TSocket(host, port, timeout);
- final TTransport transport = new TFramedTransport(tSocket);
- return transport;
- }
-}
diff --git a/core/src/main/java/core/thrift/ThriftClientPool.java b/core/src/main/java/core/thrift/ThriftClientPool.java
new file mode 100644
index 0000000..839fafb
--- /dev/null
+++ b/core/src/main/java/core/thrift/ThriftClientPool.java
@@ -0,0 +1,53 @@
+package core.thrift;
+
+import core.thrift.comment.QueryComment;
+import org.apache.commons.pool2.impl.GenericObjectPool;
+import org.apache.thrift.async.TAsyncClientManager;
+import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TProtocolFactory;
+import org.apache.thrift.transport.TNonblockingTransport;
+import org.apache.thrift.transport.TTransport;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+
+@Service
+public class ThriftClientPool {
+
+ @Value("${thrift.ip}")
+ private String ip;
+
+ @Value("${thrift.port}")
+ private int port;
+
+ @Value("${thrift.timeout}")
+ private int timeout;
+
+ private static GenericObjectPool pool;
+
+ @PostConstruct
+ public void init() {
+ pool = new GenericObjectPool<>(new ConnectionPoolFactory(ip, port, timeout));
+ }
+
+ public static void doExecute(Thrift thrift) throws Exception {
+ //从池里获取一个Transport对象
+ TTransport transport = pool.borrowObject();
+ TAsyncClientManager clientManager = new TAsyncClientManager();
+ TProtocolFactory protocol = new TBinaryProtocol.Factory();
+ QueryComment.AsyncClient asyncClient = new QueryComment.AsyncClient(protocol, clientManager, (TNonblockingTransport) transport);
+ thrift.doExecute(asyncClient);
+ //把一个Transport对象归还到池里
+ pool.returnObject(transport);
+ }
+
+ public interface Thrift {
+ void doExecute(QueryComment.AsyncClient client) throws Exception;
+ }
+
+}
+
+
+
+
diff --git a/web/src/main/java/web/config/SpringConfig.java b/web/src/main/java/web/config/SpringConfig.java
index c94f319..8f7953d 100644
--- a/web/src/main/java/web/config/SpringConfig.java
+++ b/web/src/main/java/web/config/SpringConfig.java
@@ -19,7 +19,7 @@ import java.util.List;
@Configuration
@EnableWebMvc
@PropertySource({"classpath:config.properties"})
-@ComponentScan({"web.controller","web.service","web.util","web.aop"})
+@ComponentScan({"web.controller","web.service","web.util","web.aop","core.thrift"})
public class SpringConfig implements WebMvcConfigurer {
@Override
diff --git a/web/src/main/java/web/controller/DataController.java b/web/src/main/java/web/controller/DataController.java
index 8c5623a..24b7e43 100644
--- a/web/src/main/java/web/controller/DataController.java
+++ b/web/src/main/java/web/controller/DataController.java
@@ -1,6 +1,7 @@
package web.controller;
-import core.thrift.ThriftClientDemo;
+import core.thrift.MyAsyncMethodCallback;
+import core.thrift.ThriftClientPool;
import db.form.DBAction;
import db.model.bilibili.DataModel;
import org.apache.commons.io.FileUtils;
@@ -53,7 +54,9 @@ public class DataController extends TableController call= new MyAsyncMethodCallback<>();
+ ThriftClientPool.doExecute(client -> client.commentSum(cid,call));
+ return call.getResult();
}catch (Exception e){
log.error(e);
}
@@ -66,7 +69,9 @@ public class DataController extends TableController call= new MyAsyncMethodCallback<>();
+ ThriftClientPool.doExecute(client -> client.download(form.getCids(),form.getFileName(),call));
+ String filePath=call.getResult();
if(filePath!=null) {
return new ResponseEntity<>(FileUtils.readFileToByteArray(new File(filePath)), headers, HttpStatus.CREATED);
}else{
diff --git a/web/src/main/resources/config.properties b/web/src/main/resources/config.properties
index 2b9243a..ae1cef6 100644
--- a/web/src/main/resources/config.properties
+++ b/web/src/main/resources/config.properties
@@ -4,5 +4,11 @@ db_username=sukura
db_password=Luffy9412!
hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
hibernate.connection.driver_class=com.mysql.cj.jdbc.Driver
+
#DruidDataSource\u914D\u7F6E
-druid.maxActive=20
\ No newline at end of file
+druid.maxActive=20
+
+#thrift\u914D\u7F6E
+thrift.ip=sukura.top
+thrift.port=2233
+thrift.timeout=3000
\ No newline at end of file
diff --git a/web/src/main/resources/db.properties b/web/src/main/resources/db.properties
deleted file mode 100644
index 96c44ed..0000000
--- a/web/src/main/resources/db.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-#
-#
-##\u6570\u636E\u6E901
-#hibernate.connection.url1=jdbc:mysql://sukura.top:3306/bilibili?serverTimezone=UTC&useSSL=false
-#hibernate.connection.username1=sukura
-#hibernate.connection.password1=@
-#
-##\u6570\u636E\u6E902
-#hibernate.connection.url2=jdbc:mysql://mysql.sukura.top:8635/bilibili?serverTimezone=UTC&useSSL=false
-#hibernate.connection.username2=sukura
-#hibernate.connection.password2=Luffy9412!
\ No newline at end of file
diff --git a/web/src/test/java/SpringTest.java b/web/src/test/java/SpringTest.java
index 661d712..13f86e4 100644
--- a/web/src/test/java/SpringTest.java
+++ b/web/src/test/java/SpringTest.java
@@ -1,3 +1,5 @@
+import core.thrift.MyAsyncMethodCallback;
+import core.thrift.ThriftClientPool;
import db.util.ExportUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -104,4 +106,10 @@ public class SpringTest {
resultActions.andDo(MockMvcResultHandlers.print()).andReturn();
}
+ @Test
+ public void thrift() throws Exception {
+ MyAsyncMethodCallback call= new MyAsyncMethodCallback<>();
+ ThriftClientPool.doExecute(client -> client.commentSum(49052,call));
+ log.info(call.getResult());
+ }
}
diff --git a/web/src/test/java/Test.java b/web/src/test/java/Test.java
index 1c3cf45..7e5186b 100644
--- a/web/src/test/java/Test.java
+++ b/web/src/test/java/Test.java
@@ -1,4 +1,3 @@
-import core.thrift.ThriftClientDemo;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -6,6 +5,6 @@ public class Test {
private static Logger log = LogManager.getLogger();
public static void main(String[] args) throws Exception {
- ThriftClientDemo.getTTransport();
+
}
}