package com.dragonsoft.extract.support;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
*
* @author:Yul
* @date:2017年8月30日
*/
public class ThreadPool {
private static int DEFAULT_POOL_NUMBER = 8;
private static ThreadPool instance = new ThreadPool();
private ExecutorService insertDataPool;
private ExecutorService readDataPool;
private ThreadPool() {
// TODO Auto-generated constructor stub
insertDataPool = Executors.newFixedThreadPool(DEFAULT_POOL_NUMBER);
readDataPool = Executors.newFixedThreadPool(DEFAULT_POOL_NUMBER);
}
public static ThreadPool getInstance(){
return instance;
}
public void dispatchInsertDataThread(Runnable command){
insertDataPool.execute(command);
}
public void dispatchReadDataThread(Runnable command){
readDataPool.execute(command);
}
}
package com.dragonsoft.extract.support;
import java.util.concurrent.ConcurrentLinkedQueue;
public class DataContainer {
private boolean ending = false;
private int currCount = 0;
private int _queueCapacity;
private ConcurrentLinkedQueue<Object> _queue = new ConcurrentLinkedQueue<Object>();
public DataContainer() {
this(20);//默认大小
}
public DataContainer(int queueCapacity) {
this._queueCapacity = queueCapacity;
}
public synchronized void insertData(Object data) throws InterruptedException{
while (currCount > _queueCapacity) {
wait();
}
currCount++;
_queue.add(data);
notifyAll();
}
public synchronized Object getData() throws InterruptedException{
while (currCount <= 0) {
if(!ending){
wait();
}else{
break;
}
}
currCount--;
Object results = _queue.poll();
notifyAll();
if (results == null || results instanceof Integer) {
this.ending = true;
}
return results;
}
}
package com.dragonsoft.extract.support;
public abstract class EtlConstants {
public final static Integer EXTRACT_END_FLAG = -1;
}
package com.dragonsoft.extract.service;
import java.io.File;
import java.util.concurrent.CountDownLatch;
import com.dragonsoft.extract.support.DataContainer;
/**
*
* @author:Yul
* @date:2017年8月30日
*/
public class ReadDataService extends AbstractReadDataRunnable {
public ReadDataService(File srcFile, DataContainer dataContainer, CountDownLatch countDownLatch) {
super(srcFile, dataContainer, countDownLatch);
// TODO Auto-generated constructor stub
}
}
package com.dragonsoft.extract.service;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import org.apache.commons.lang.StringUtils;
import com.dragonsoft.extract.S