做了一个数据库间导数据的管理工具
例如可以吧mysql数据库的数据,根据一定得规则导入到oracle数据库中
这是一个插件式的项目,具体的连接源数据库和目标数据库,两数据库间的数据通过怎样的规则导,从源数据库取得数据,插入到目标数据库,这些都是写到jar包里的内容,是用户写的,平台不用考虑!
在平台上,只需要配置源数据库,和目标数据库,再写明了调用哪个jar包么就可以完成导数据操作
这个工具就类似于一个平台一样,只是负责管理这些任务,具体的任务进行什么操作,就不管了,有点像任务管理器一样但平台要实现的一个功能是:如果发现在用户载入的任务中(每个任务都是一个线程,这些线程由一个线程池控制),如果有几个任务的目标数据库是一样的,那么就不能让这几个任务同时执行,要让他们依次执行,对于目标数据库不一样的任务,就不用做限制了。问题就是如何控制这些目标一样的任务依次执行?(这些任务都是周期执行的,就是任务在执行完成后,可能要在比如5小时后,再次执行)我想的办法是,比如用户载入了5个任务,其中有3个任务目标数据库一样,那么就找出这3个一样的任务,把它们装到一个ArryList中,在线程执行时先判断,如果当前要执行的线程位于这个ArryList的第一位,那么就让它执行,不是就让它等待1秒再次检查位置是否到1,如果这个线程执行完了,就把它移到ArryList的最后一位,把其他的向前提一位,(例如1,2,3 就变成了 2,3,1)这个方法如果进入调试模式运行,就是正确的,任务会按1,2,3,1,2,3.。。这样一直执行下去
但如果正常执行的时候,就不正常了,会1,3,2,1,3,1,3,1,3,2,2,1,3,1,3。好像没什么规律了就我是在本机的oracle数据库上测试的,导数据时用到的表都是空的,设置的每5秒任务会执行一次想知道为什么正常运行时就不正常了,是设计思想有什么问题吗?

解决方案 »

  1.   

    task-node{
    pri:
    section:
    systemContext:
    }
    systemContex{
    []
    ....
    }
    散列表{
    H(x)散列函数--S(优先级:时段:or other info)--用于任务定位
    HashSet---用于任务存储
    method(task-node)---操作方法
    优先队列---排序集合
    }
      

  2.   

    IBM有个工具叫Rational Data Architect,做的就是你想要的事情,也许可以借鉴一下
      

  3.   

    是开源的最好啊
    呵呵资源冲突是并发问题吧
    跟synchronized有关系没
      

  4.   

    楼上说的对,lz得写个线程安全的执行器.去执行不同的任务
    感觉lz的需求用队列似乎可以