本人推荐 做一个跑批程序 进行同步数据 这样能提高代码性能 以及程序性能 当然 你所说的瓶颈 无非就是大数据量对数据岩虚库斗仔的 *** 作次数 以及海量数据造成程序效率的一个瓶颈 谢谢!
楼主晌让用hibernate 所以说就不需要在手动管理connection的AutoCommit属性了。不用触发器的话,也好办,不过可能麻烦一点。假设你已经做好了表list1和list2 到对象list1和list2的映射。list1和list2配置成一对一映射,list2的主键也是list1的外键,生成机制由list1负责。级联关系cascade属性设置为all,也就是对list1 *** 作的时候hibernate会级联的 *** 作它的附着物list2
那么在 *** 作对象list1基础DAO中的曾删改查方法中,同时 *** 作list2对象即可。
以增加 *** 作为例:
比如 new出来一个list1对象,然后充填属性:
list1.setName("张三")
list1.setPwd("123456")
list1.getList2.setName(list1.getName())
list1.getList2.setpwd(list1.getPwd())
session.save(list1)//这里当持久化list1的时候,会级联把list2也持久了
提交transaction
关键顷谨巧问题还是配置,比较麻烦 容易出错。我对hibernate不是多了解,想的这个办法可能比较雀键笨,应该还有好的办法来解决。等等高手来看看吧。
源代码如下: 1、线程类 package com.yjf.util import java.util.Date import java.util.List public class GetWebThread extends Thread{ /** * 线程 */ public void run(){ try { while (true) { int day = 0 long time1 = new Date().getTime() //改磨用来同步抓取线程 synchronized("searchthead"){ Main.thisdaycount++ if(Main.thisdaycount>Main.daycount){ break } System.out.println("开始查询第"+(Main.thisdaycount)+"天") Thread.sleep(133) day = Main.thisdaycount-1 } //获取抓取的时间 String datetext = TimeUtil.date.format(TimeUtil.addDaysForDate(day)) String[] txt =FileUtil.getCityByTxtFile() for(int t=0t<txt.lengtht++){ String[] way = txt[t].split("\|") String start = way[0] String end = way[1] //抓取到空中的数据列表 List<DataBean>datalist = Main.getDataList(datetext, start, end) if(datalist!=null){ Main.isadsl = 0 CheckAdsl.adsllasttime = new Date().getTime() FileUtil.addDataToFileCsv(datalist) Main.log.printLog("===="+datetext+"="+start+"="+end+"="+t+"=数据总数:"+datalist.size()) }else{ Thread.sleep(11) AdslThead.isadsl = true Thread.sleep(11) //判断是否正在拨号 并暂停斗歼山线程 while (AdslThead.isadsl) { Thread.sleep(5000) } t-- } } long time2 = new Date().getTime() Main.log.printLog(datetext+"==查询完毕=========耗时"+(time2-time1)) } } catch (Exception e) { Main.log.printLog(e.getMessage()) e.printStackTrace() } } } 第二步, 准备线程启动。 控制线程数量。 http://www.qi788.com 查询数据总天数。 设置拨号状态等。 2、线程启动类。 包括启动,控制,停止 package com.yjf.util import java.io.BufferedInputStream import java.io.FileInputStream import java.io.InputStream import java.util.ArrayList import java.util.Date import java.util.List import java.util.Properties import java.util.Timer public class Main { private static boolean isRunGrabThread = true//抓取线程是否执行完毕 public static int threadCount = 3//线程数量 public static int daycount = 30//查询总天数 public static int thisdaycount = 0 public static int isadsl = 0 public static int adslcount = 1 public static void main(String[] args) { try { startThead()//启动抓取数据主线程 } catch (Exception e) { e.printStackTrace() } }public static void startThead(){ Thread[] grabThreads= new Thread[threadCount] try{ //开启-数据抓取子线程 for(int i=0i<grabThreads.lengthi++){ Thread searchThread=new GetWebThread() grabThreads[i] = searchThread grabThreads[i].setDaemon(true) grabThreads[i].start() } isRunGrabThread = true //监控子线程,全部完成程序退出 http://qi788.com/info/11.html WhileLoop: while(true){ //拨号策略控制 //reconnectControl() //判断子线程是否运行完成 for(int i=0i<threadCounti++){ if(grabThreads[i].isAlive()){ Thread.sleep(3*1000) continue WhileLoop } } //所有抓取线程执行完毕 isRunGrabThread = false //子线程执行完毕则退出 break } } catch (Exception e) { System.out.println("main主线程--系统异常!") } } } 文章来源注明: http://qi788.com/info/11.html欢迎分享,转载请注明来源:内存溢出
评论列表(0条)