关于tomcat启动完自动执行的问题,初始化问题,加载两次问题

因为项目要求,要创建一个定时器来一段时间监听有没有信息被发布,所以每次都是部署完一个项目之后手动启动定时器,之后发现每次部署都要手动启动,所以决定把它改成随项目启动而启动,一开始百度用的是这两种方法。


注:http://jingyan.baidu.com/article/359911f5518d7457fe0306f9.html


这种方法,这种方法确实可以执行,不过因为我要在这个方法里边用到spring注入的dao,所以,每次运行项目都会报   空指针  异常,所以调试了N遍,以为自己注入的有问题,然后决定试第二种方法;


第二种是这个样子的,就是一个servlet 然后设置了启动顺序,,,这种方法是这个样子,确实也能用,不过它运行了3次,一个定时器启动三次是什么概念,而且又一次启动的的时候居然报了 空指针 ,也是空指针,估计是在WEB.XML里配置的时候启动的时候有问题,而当我把XML的配置注释掉之后,还是会运行2次,不过那两次就没什么问题,不过是同时执行,,其实这个位置我有点不理解的就是,,为什么XML都注释掉它还是会自动运行呢?而且还是两次。


是在tomcat部署出现多少ms前运行的,,注入也没有问题,但是同时运行了两次,这个是不能允许出现的,,同时运行两次,导致的是执行任务的时候也会执行两次,会插入数据库两次,问题很严重,于是也是调试了N次,也没解决。

之后搜了下,可能是因为这些方法可能是在spring容器还没有完成初始化的时候就已经执行了,所以导致的问题就是 空指针,初始化两次网上有写,也不知道对不对,说是tomcat问题,http://www.cnblogs.com/feiguo/p/3779192.html   这个是看着还算比较容易理解的,

解决方法如下:

使用onApplicationEvent这个方法就可以,这个方法会在spring的bean全部初始化之后才会执行,所以就完美解决了没有完全初始化的问题,不过类要实现 ApplicationListener

如下

public class onLoad implements ApplicationListener<ContextRefreshedEvent>{}

然后在实现的这个方法里边写自己的代码

public void onApplicationEvent(ContextRefreshedEvent event) {}

判断的话,因为if(event.getApplicationContext().getParent() == null) 这个方法我可以理解,就是root application context 没有parent  所以照理说只会执行一次,不过这里我这边还是执行了两次,估计是那个所说的tomcat问题,然后试了另一种

if(event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext"))

这种方法就只执行了一次,可能是因为spring里root webapplicationContext 只有一个,


定时器的话是这个样子的  

Runnable runnable = new Runnable() {
public void run() {

//代码

}
};
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
// 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间,单位是s
service.scheduleAtFixedRate(runnable, 30, 60, TimeUnit.SECONDS);


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 出现这种情况很可能是由于jdk版本与web项目的依赖不匹配导致的。 一种可能是你的项目使用了较新版本的jdk,但是你所使用的jdk版本不支持某些特性或功能。在这种情况下,可以尝试更新你的jdk版本,或者修改项目中的依赖以适应所使用的jdk版本。 另一种可能是你的项目依赖了一些特定版本的jdk,但是你所使用的jdk版本与项目的依赖不匹配。这种情况下,你可以尝试降低jdk的版本,或者更新项目的依赖以适应所使用的jdk版本。 此外,还有一种情况是你的项目中没有正确配置资源文件的加载路径。你可以检查项目的配置文件,确认资源文件的路径是否正确,并确保资源文件是可访问的。 最后,你还可以尝试重启IDEA和Tomcat服务器,以确保配置和资源文件的改动生效。 综上所述,解决这个问题的关键是确定jdk版本与项目依赖的匹配情况,并正确配置资源文件的加载路径。希望这些解决方法能帮到你。 ### 回答2: 在启动web项目时,若遇到资源文件加载失败的问题,可能是由于JDK配置问题导致的。JDK是Java开发工具包,它包括了用于开发、编译、运行Java程序所需的各种工具和库文件。 首先,我们需要检查JDK的安装和配置是否正确。确保已正确安装JDK,并设置了正确的环境变量。 其次,我们需要确保IDEA中的项目配置正确。在IDEA中,我们可以在项目设置中找到JDK配置选项,确保选择了正确的JDK版本。 另外,还需要检查项目的依赖配置。在web项目中,通常需要依赖一些库文件和资源文件。我们可以在项目的构建文件或者IDEA的项目配置中查看依赖的配置内容,确保依赖的文件路径和名称正确。 如果以上步骤都排除无误,还存在资源文件加载失败的情况,可能是由于项目的部署路径不正确或者Tomcat的配置问题导致的。我们可以检查一下项目部署的路径是否正确,并且查看Tomcat的配置文件,确认配置中相关资源文件的路径是否正确。 如果以上方法仍然无法解决问题,我们可以尝试重新安装JDK和IDEA,并仔细按照官方文档进行配置。如果问题仍然存在,可能需要进一步调试和查找其他原因。 总之,当IDEA启动web项目后无法正确加载资源文件时,通常是由于JDK配置问题导致的。我们需要仔细检查JDK的安装和配置、项目的依赖配置以及Tomcat的部署路径和配置,以找到并解决问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值