Struts2기반 웹 프로그램 I/O 손실 문제
조회수 2096회
안녕하세요. 사용자 요청을 기록하는 i/o 프로그램을 만들고 있습니다. 서버가 다운 되더라도 파일로 남아 있어 언제든지 본 서버 DB와 동기화 가능하도록 하려고 합니다.
현재 테스트 중 인데, 1초에 천번의 요청을 받으면 400개 정도는 손실됩니다. java단에서 synchronized 도 걸어보고 보고 이것저것 해보아도 무슨 문제인지 모르겠습니다.
@@@@ 테스트용 클라이언트 페이지
var i=0;
function testfunction(){
var testid = $("#Bid").val();
if(testid==""){
alert("아이디 입력 해주세요.");
return;
}
//http://localhost:8080/api/xxxxx.do?imei=testIMEI3&phoneSerial=testSerial1&phoneModel=testModel1&phoneUptime=1:1:1&lineNumber=01000010001&pttNumber=1|123*456&networkName=lg&networkType=lte&androidVersion=1.1&swVersion=aa_f10_1212&extra=extra1
var i=0;
while(i!=1000){
var myurl = "http://localhost:8080/api/trmnlInfoColctToFile.do?imei="+testid+i+"&phoneSerial=testSerial1&phoneModel=testModel1&phoneUptime=1:1:1&lineNumber=01000010001&pttNumber=1|123*456&networkName=lg&networkType=lte&androidVersion=1.1&swVersion=aa_f10_1212&extra=extra1";
$.ajax({
type: 'GET',
url: myurl,
success: function(data) {
console.log(data);
}
});
i++;
}
console.log("종료");
}
</script>
ID 넣기 시작버튼
@@@@@요청을 받으면 처리하는 코드 부분 입니다.@@@@@@@@
public class TrmnlinfoColctAction extends ActionSupportEx implements Preparable {
public void prepare() throws Exception {
vo = new TrmnlinfoColctVo();
dao = new TrmnlinfoColctDao();
}
public void trmnlInfoColctToFile(){
String Time = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
StringBuffer sb = new StringBuffer();
sb.append(((TrmnlinfoColctVo)vo).getImei() == null ? "" : ((TrmnlinfoColctVo)vo).getImei());
sb.append(",").append(((TrmnlinfoColctVo)vo).getPhoneSerial() == null ? "" : ((TrmnlinfoColctVo)vo).getPhoneSerial());
sb.append(",").append(((TrmnlinfoColctVo)vo).getPhoneModel() == null ? "" : ((TrmnlinfoColctVo)vo).getPhoneModel());
sb.append(",").append(((TrmnlinfoColctVo)vo).getPhoneUptime() == null ? "" : ((TrmnlinfoColctVo)vo).getPhoneUptime());
sb.append(",").append(((TrmnlinfoColctVo)vo).getLineNumber() == null ? "" : ((TrmnlinfoColctVo)vo).getLineNumber());
sb.append(",").append(((TrmnlinfoColctVo)vo).getPttNumber() == null ? "" : ((TrmnlinfoColctVo)vo).getPttNumber());
sb.append(",").append(((TrmnlinfoColctVo)vo).getNetworkName() == null ? "" : ((TrmnlinfoColctVo)vo).getNetworkName());
sb.append(",").append(((TrmnlinfoColctVo)vo).getNetworkType() == null ? "" : ((TrmnlinfoColctVo)vo).getNetworkType());
sb.append(",").append(((TrmnlinfoColctVo)vo).getAndroidVersion() == null ? "" : ((TrmnlinfoColctVo)vo).getAndroidVersion());
sb.append(",").append(((TrmnlinfoColctVo)vo).getSwVersion() == null ? "" : ((TrmnlinfoColctVo)vo).getSwVersion());
sb.append(",").append(((TrmnlinfoColctVo)vo).getExtra() == null ? "" : ((TrmnlinfoColctVo)vo).getExtra());
String fileName = Time.substring(0, 10)+".req";
File AbsolPath = new File(fileName);
String Mypath = AbsolPath.getAbsolutePath();
//D:\snkorea\ktpOTA(save by file)\tools\eclipse\2016042015.req
Mypath = Mypath.substring(0,Mypath.lastIndexOf("\\")); // 이클립스 폴더로
Mypath = Mypath.substring(0,Mypath.lastIndexOf("\\")); // tools 폴더로
Mypath = Mypath.substring(0,Mypath.lastIndexOf("\\")); // 프로젝트 폴더로
Mypath = Mypath+"\\workspace\\KtpOta\\WebContent\\data\\ing";
File myPath = new File(Mypath);
//디렉토리 없을 경우 생성
if(!myPath.exists()){
myPath.mkdirs();
}
File myFilePath = new File(Mypath+"\\"+fileName);
FileWriter fw = null;
//파일 유무 확인
try{
if(myFilePath.isFile()){
//System.out.println("파일존재");
fw = new FileWriter(myFilePath, true);
fw.write(sb.toString()+"\n");
fw.flush();
}else{
//System.out.println("파일존재하지 않음");
fw = new FileWriter(myFilePath, false);
fw.write(sb.toString()+"\n");
fw.flush();
}
fw.close();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("요청처리");
}
}
댓글 입력