问题是这样的:在tomcat中的一个sevlet有一个java计时器,每隔几小时运行,从一个地方得到一些数据插入mysql中,现在发现,插入的数据不完全就是说一条记录其中有个字段一直显示0,而实际中是肯定有的.奇怪的是我的日志中没有显示有插入的操作,但是数据已经插入了并且是不完全的数据.如果我reload tomcat,日志就会记录,数据也完全,一切正常.同样的方法我放在jsp中手工执行都是正确的,就是在这个计数器里定时半夜执行就会有问题.(日志显示有执行,但没有插入数据的日志,可是有数据插入),而代码中如果执行了插入必定会执行记录日志.这种情况以前都一直没问题,但是从最近一个月来就出现了,请问会是什么情况呢?实在搞不懂了!

解决方案 »

  1.   

     static {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {  
    public void run() {
    log.error("开始loadConfig");
    loadConfig();
      log.error("结束loadConfig");
    }
    }, 1000*30, 1000 * 60 * 60 * 6); }  private static void loadConfig(){
      //这里代码绝对没问题,就是插入一些数据到mysql,记录一些日志,并且是插入一条记录一条日志  }在半夜执行的时候就有问题,也不报错,日志记录就是
    开始loadConfig
    结束loadConfig
    但是已有部分数据插入数据库
    当我白天重新reload,又正常了,日志显示
    开始loadConfig
    开始插入数据1,sql="XXX"
    开始插入数据2,sql="XXX"
    结束loadConfig
      

  2.   

    问题很有可能出在loadConfig中!
      

  3.   

    最好加个标志程序正在运行。
    private boolean runing=false;
    static {
                Timer timer = new Timer();
                timer.schedule(new TimerTask() {  
                    public void run() {
                        log.error("开始loadConfig");
                        if(!runing){
                         runing=true;
                        loadConfig();
                         runing=false;
                        }
                        
                         log.error("结束loadConfig");
                    }
                }, 1000*30, 1000 * 60 * 60 * 6);       不过你的计时器几个小时运行一次,应该不是这个问题