StringBuilder pSql = new StringBuilder();
pSql.append(" select p.* from bigdata_app_push_seq_").append(dateTime);
pSql.append(" p ");
pSql.append(" where p.push_time >=").append(dayStartTime);
pSql.append(" and p.push_time <").append(dayEndTime);
List<Map<String, String>> pushList = hiveDbop.dbSearch(pSql.toString());
当程序执行到查询hive数据时,并没有直接进入dbSearch方法,而是直接抛出空指针异常.
java.lang.NullPointerException
at com.eos.hms.analysis.AppPushAnalysis.appPushStatistics(AppPushAnalysis.java:282)
at com.eos.hms.analysis.AppPushAnalysis.execDay(AppPushAnalysis.java:192)
at com.eos.hms.analysis.AppPushAnalysis.exec(AppPushAnalysis.java:47)
at com.eos.hms.task.manual.BigDataCmdTask.start(BigDataCmdTask.java:81)
at com.eos.hms.modules.job.TaskStatusCmdJob.innerExecute(TaskStatusCmdJob.java:27)
at com.eos.hms.job.CommonStatusJob.execute(CommonStatusJob.java:41)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
①一开始,我怀疑是dbSearch方法是不是写的有问题, 但是通过测试之前写过的类似的例子,排除了这个疑点,后来我就将两个代码进行比较,发现是hiveDbop对象的问题.
如果hiveDbop是局部对象,HiveDbop hiveDbop = DbopManager.loadHiveDbop(DbopManager.hiveDB); 则没有问题. 但如果是全局变量, 则会出现上述的空指针异常.
②后来,我就查看mysql数据库连接对象是否也会出现这种问题, 最后是多虑的, mysql数据库连接对象是支持全局变量的.
③最后,我只能暂时的认为,hive数据库连接对象最好是局部变量,至于原因,我就不知道了,先记于此.