import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import
@ContextConfiguration(locations = {
"classpath:conf/applicationContext.xml",
"classpath:conf/spring/spring-db-source-test.xml",
"classpath*:/conf/spring/spring-dal.xml",
"classpath*:/conf/spring/spring-dal-shard.xml",
})
@TransactionConfiguration(defaultRollback = true)
public class ReceiptSequenceNumberGenServiceImplTest extends AbstractTestNGSpringContextTests {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private ReceiptSequenceNumberGenService receiptSequenceNumberGenService;
@Autowired
private IExpressBillService expressBillService;
private static ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();
@BeforeTest
public void before() {
}
@Test
public void testSeqNumber() throws Exception {
final ExecutorService executorService = Executors.newFixedThreadPool(5);
final ExecutorService executorService2 = Executors.newFixedThreadPool(250);
CountDownLatch cd = new CountDownLatch(1);
Runnable t1 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = receiptSequenceNumberGenService.genSequenceNumberWithReceiptType("RKDD");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t2 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = receiptSequenceNumberGenService.genSequenceNumberWithReceiptType("RKDD");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t3 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = receiptSequenceNumberGenService.genSequenceNumberWithReceiptType("RKDD");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t4 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = receiptSequenceNumberGenService.genSequenceNumberWithReceiptType("RKDD");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t5 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = receiptSequenceNumberGenService.genSequenceNumberWithReceiptType("RKDD");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t6 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = receiptSequenceNumberGenService.genSequenceNumberWithReceiptType("RKDD");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t7 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = receiptSequenceNumberGenService.genSequenceNumberWithReceiptType("RKDD");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t8 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = receiptSequenceNumberGenService.genSequenceNumberWithReceiptType("RKDD");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
executorService.execute(t1);
executorService.execute(t2);
executorService.execute(t3);
executorService.execute(t4);
executorService.execute(t5);
executorService.execute(t6);
executorService.execute(t7);
executorService.execute(t8);
executorService2.execute(new TestRunable(receiptSequenceNumberGenService));
cd.await();
executorService.shutdown();
executorService2.shutdown();
}
private static class TestRunable implements Runnable {
private ReceiptSequenceNumberGenService receiptSequenceNumberGenService;
public TestRunable(ReceiptSequenceNumberGenService receiptSequenceNumberGenService) {
// System.out.println(seq);
this.receiptSequenceNumberGenService = receiptSequenceNumberGenService;
}
@Override
public void run() {
// assert (receiptSequenceNumberGenService.updateDuplicateData(seq) == true);
// assert ();
while (true) {
String seq = queue.poll();
if (seq == null) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
assert (receiptSequenceNumberGenService.updateDuplicateData(seq));
}
}
}
}
@Test
public void testExpressBill() throws InterruptedException {
String seq = expressBillService.generateExpressBillNo();
System.out.println("seq:"+seq);
final ExecutorService executorService = Executors.newFixedThreadPool(5);
final ExecutorService executorService2 = Executors.newFixedThreadPool(250);
CountDownLatch cd = new CountDownLatch(1);
Runnable t1 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = expressBillService.generateExpressBillNo();
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t2 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = expressBillService.generateExpressBillNo();
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t3 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = expressBillService.generateExpressBillNo();
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t4 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = expressBillService.generateExpressBillNo();
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t5 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = expressBillService.generateExpressBillNo();
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t6 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = expressBillService.generateExpressBillNo("REWQ");
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t7 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = expressBillService.generateExpressBillNo();
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t8 = new Runnable() {
@Override
public void run() {
while (true) {
String seq = expressBillService.generateExpressBillNo();
// System.out.println("###" + seq);
queue.add(seq);
try {
Thread.currentThread().sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
executorService.execute(t1);
executorService.execute(t2);
executorService.execute(t3);
executorService.execute(t4);
executorService.execute(t5);
executorService.execute(t6);
executorService.execute(t7);
executorService.execute(t8);
executorService2.execute(new TestRunable2(receiptSequenceNumberGenService));
cd.await();
executorService.shutdown();
executorService2.shutdown();
}
private static class TestRunable2 implements Runnable {
private ReceiptSequenceNumberGenService receiptSequenceNumberGenService;
public TestRunable2(ReceiptSequenceNumberGenService receiptSequenceNumberGenService) {
// System.out.println(seq);
this.receiptSequenceNumberGenService = receiptSequenceNumberGenService;
}
@Override
public void run() {
// assert (receiptSequenceNumberGenService.updateDuplicateData(seq) == true);
// assert ();
while (true) {
String seq = queue.poll();
if (seq == null) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
assert (receiptSequenceNumberGenService.updateDuplicateData(seq) == true);
}
}
}
}
@Test
public void testGenID() throws Exception {
final ExecutorService executorService = Executors.newFixedThreadPool(5);
final ExecutorService executorService2 = Executors.newFixedThreadPool(250);
CountDownLatch cd = new CountDownLatch(1);
Runnable t1 = new Runnable() {
@Override
public void run() {
while (true) {
Long seq = receiptSequenceNumberGenService.genReceiptPrimaryKey("RKDD");
// System.out.println("###" + seq);
queue.add(seq.toString());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t2 = new Runnable() {
@Override
public void run() {
while (true) {
Long seq = receiptSequenceNumberGenService.genReceiptPrimaryKey("RKDD");
// System.out.println("###" + seq);
queue.add(seq.toString());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t3 = new Runnable() {
@Override
public void run() {
while (true) {
Long seq = receiptSequenceNumberGenService.genReceiptPrimaryKey("RKDD");
// System.out.println("###" + seq);
queue.add(seq.toString());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t4 = new Runnable() {
@Override
public void run() {
while (true) {
Long seq = receiptSequenceNumberGenService.genReceiptPrimaryKey("RKDD");
// System.out.println("###" + seq);
queue.add(seq.toString());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t5 = new Runnable() {
@Override
public void run() {
while (true) {
Long seq = receiptSequenceNumberGenService.genReceiptPrimaryKey("RKDD");
// System.out.println("###" + seq);
queue.add(seq.toString());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t6 = new Runnable() {
@Override
public void run() {
while (true) {
Long seq = receiptSequenceNumberGenService.genReceiptPrimaryKey("RKDD");
// System.out.println("###" + seq);
queue.add(seq.toString());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t7 = new Runnable() {
@Override
public void run() {
while (true) {
Long seq = receiptSequenceNumberGenService.genReceiptPrimaryKey("RKDD");
// System.out.println("###" + seq);
queue.add(seq.toString());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Runnable t8 = new Runnable() {
@Override
public void run() {
while (true) {
Long seq = receiptSequenceNumberGenService.genReceiptPrimaryKey("RKDD");
// System.out.println("###" + seq);
queue.add(seq.toString());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
executorService.execute(t1);
executorService.execute(t2);
executorService.execute(t3);
executorService.execute(t4);
executorService.execute(t5);
executorService.execute(t6);
executorService.execute(t7);
executorService.execute(t8);
executorService2.execute(new TestRunable(receiptSequenceNumberGenService));
cd.await();
executorService.shutdown();
executorService2.shutdown();
}
}
某次壓力測試的代碼段
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.