精华内容
下载资源
问答
  • 通过排查发现主要是由于项目被部署在服务器tomcat的webapps目录里,导致项目被tomcat初始化了2次,部署成功了2次,一次访问路径是项目名的,一次访问路径是/。而本地的eclipse项目部署在wptwebapps不在webapps里,...

    spring定时器在本地eclipse就只执行1次,放到服务器就执行2次。通过排查发现主要是由于项目被部署在服务器tomcat的webapps目录里,导致项目被tomcat初始化了2次,部署成功了2次,一次访问路径是项目名的,一次访问路径是/。而本地的eclipse项目部署在wptwebapps不在webapps里,webapps为tomcat默认目录,里面的war包会自动被解压,项目会自动被部署。

    网上的解决办法是叫修改tomcat的server.xml,不让tomcat部署2次,但是解决办法都有些缺点。如 地址https://www.cnblogs.com/Syney/p/7678714.html

    实际中那个访问路径带项目名的不需要,,所以直接阻止它启动,这样项目就只成功启动了 1次,问题就可以解决。

    那怎么阻止呢? 在项目启动的时候,我们判断当前访问路径是/ 还是 项目名,如果是项目名的,我们就阻止它,制造一个异常让他创建bean的时候失败就可以阻止项目启动了。

    阻止具体方法,创建一个bean,实现 ServletContextAware 接口,当这个bean创建时,会自动调用setServletContext() ,在方法里我们判断下当前的项目访问路径是否为空或者是否为 / ,如果是,正常通过。如果不是,说明当前tomcat正在初始化访问路径为项目名的项目,所以我们要阻止它,,这时候抛出个运行异常,当前bean就会创建失败,这时候这个项目就会启动失败了。

    上代码

    由于我定时任务在CacheMapUtil里,所以直接在CacheMapUtil里实现ServletContextAware

    总结 问题实际上是项目被tomcat部署成功2次,导致定时器有2个。本方法是直接干掉其中一个,只让tomcat成功部署一个。

    缺点 访问路径为项目名部署被干掉了,所以不能使用项目名访问

    补充下,发现contextPath equals那里写错代码,应该是'/' 而不是'|'

    展开全文
  • 我单独放build脚本CC正常,每隔3分钟构建一次,但加入release脚本后就出现了问题,我release.xml脚本如下:[code="java"] <property name="tomcatHome" value="E:\TDDOWNLOAD\apache-tomcat-6.0.33"/> ${...
  • quartz定时任务实现只执行一次,以后不再执行

    万次阅读 热门讨论 2018-06-13 09:30:34
    那么定时任务也可以实现只执行一次的操作。配置如下&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" ...

    按说只在tomcat启动时执行一次,我们可以用监听器来实现,但是有些开发框架中因特殊场景不适合用监听器。那么定时任务也可以实现只执行一次的操作。配置如下

    好使的话大家给个赞

    <?xml version="1.0" encoding="UTF-8"?>
    <beans 
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
     
        
    
        <bean id="publicWebServiceJob" class="cn.org.site.business.quartz.PublicWebServiceScheduleJob"/>
        <bean id="publicWebServiceJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject" ref="publicWebServiceJob" />
            <property name="targetMethod" value="doJob"></property>
            <!--默认允许并发执行,设置为false 防止并发执行 发生死锁问题 -->
            <property name="concurrent" value="false"/>
    
        </bean>
    
    
    
    <!-- quartz一分钟执行一次的实现方式 -->
        <!-- <bean id="publicWebServiceTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" ref="publicWebServiceJobDetail"></property>
            <property name="cronExpression" value="0 */1 * * * ?"></property>
            <property name="description" value="定时"></property>
        </bean>-->
    
    
        <!-- quartz实例化5秒后执行一次job的方式 -->
        <bean id="publicWebServiceTriggerBean" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
            <property name="jobDetail" ref="publicWebServiceJobDetail" />
            <property name="startDelay" value="5000" /> <!-- 启动延迟  单位/毫秒-->
    
            <property name="repeatCount" value="0" />  <!--  重复次数  -->
        </bean>
    
        <!-- 触发器-->
        <bean id="schedulerFactoryBean-em" lazy-init="false"  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    
                    <ref bean="publicWebServiceTriggerBean"/>
                </list>
            </property>
        </bean>
    </beans>

    展开全文
  • 这两天发现部署到tomcat中的quartz定时任务每回都被执行了两,但是在myeclipse执行时又不会,后来搜了网上,才发现该问题发生于部署在tomcat服务器上,由tomcat的自启动导致。 导致该问题的原因是你的tomcat...

    这两天发现部署到tomcat中的quartz定时任务每回都被执行了两次,但是在myeclipse执行时又不会,后来搜了网上,才发现该问题只发生于部署在tomcat服务器上,由tomcat的自启动导致。

    导致该问题的原因是你的tomcat的conf目录中的server.xml有如下配置


      <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

    <Context path="" docBase="C:\Program Files\Tomcat 6.0\webapps\XXX\"  workDir="C:\Program Files\Tomcat 6.0\webapps\XXX\"  />

      其中第一行告诉tomcat,在启动的时候加载webapps下的所有项目工程文件,第二行又让tomcat再加载了一遍(一般情况下配置第二行,主要是由于想域名访问时将工程名去掉的原因配置),这种情况下会导致工程中的quartz定时被两次触发,执行两边。



    因此修改方法如下


    <Host name="localhost"  appBase=""

                unpackWARs="false" autoDeploy="false"

                xmlValidation="false" xmlNamespaceAware="false">

    <Context path="" docBase="C:\Program Files\Tomcat 6.0\webapps\XXX\"  workDir="C:\Program Files\Tomcat 6.0\webapps\XXX5xun5mi\"  />

    将第一行中的appbase中的值去除,且autodeploy属性值设置为false,因此该行不会导致任何工程项目的加载。

    展开全文
  • 这两天发现部署到tomcat中的quartz定时任务每回都被执行了两,但是在myeclipse执行时又不会,后来搜了网上,才发现该问题发生于部署在tomcat服务器上,由tomcat的自启动导致。 导致该问题的原因是你的tomcat...
    这两天发现部署到tomcat中的quartz定时任务每回都被执行了两次,但是在myeclipse执行时又不会,后来搜了网上,才发现该问题只发生于部署在tomcat服务器上,由tomcat的自启动导致。

    导致该问题的原因是你的tomcat的conf目录中的server.xml有如下配置


    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

    <Context path="" docBase="C:\Program Files\Tomcat 6.0\webapps\XXX\" workDir="C:\Program Files\Tomcat 6.0\webapps\XXX\" />

    其中第一行告诉tomcat,在启动的时候加载webapps下的所有项目工程文件,第二行又让tomcat再加载了一遍(一般情况下配置第二行,主要是由于想域名访问时将工程名去掉的原因配置),这种情况下会导致工程中的quartz定时被两次触发,执行两边。



    因此修改方法如下


    <Host name="localhost" appBase=""

    unpackWARs="false" autoDeploy="false"

    xmlValidation="false" xmlNamespaceAware="false">

    <Context path="" docBase="C:\Program Files\Tomcat 6.0\webapps\XXX\" workDir="C:\Program Files\Tomcat 6.0\webapps\XXX5xun5mi\" />

    将第一行中的appbase中的值去除,且autodeploy属性值设置为false,因此该行不会导致任何工程项目的加载。
    展开全文
  • 这两天发现部署到tomcat中的quartz定时任务每回都被执行了两,但是在myeclipse执行时又不会,后来搜了网上,才发现该问题发生于部署在tomcat服务器上,由tomcat的自启动导致。 导致该问题的原因是你的tomcat...
  • Spring定时器,触发一次任务。

    千次阅读 2018-10-23 15:45:45
    那么定时任务也可以实现只执行一次的操作。配置如下 好使的话大家给个赞 &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt; &amp;lt;bean id=&quot;...
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。...等再次使用eclipsetomcat无法启动了,并且报错说端口占用 更新:需要进入Tomca文件目录的bin目录,执行shutdown.bat,究其原因其实还是...
  • 我在写一个项目的时候,用到了一个@PostConstruct的注解用来执行一个启动项目就执行的一个事情,但是启动时,却发现出现了被执行两的情况,不明所以。 原因: 后来查看我的项目,我的项目名字为myssm,这也是...
  • 答:Servlet执行过程:程序第一次访问,会调用servlet的init()方法初始化(只执行一次),每次程序执行都会根据请求调用doGet()或者doPost()方法,程序停止(停止tomcat)调用destory()方法。注意:上面过程是没配置标签...
  • init()方法执行一次,也说明一个Servlet只有一个实例,即单列模式。 如果访问Servlet时才初始化,将会影响第一个访问的用户,如何修改? 修改初始化的时间。使用,该值大于等于0时,该servlet就会在服务器启动...
  • Jenkins构建完成之后运行脚本可以杀掉TomCat但是起不来的解决方法 写了个重启tomcat的脚本,让jenkins...试了很多发现都是能够杀掉Tomcat但是启动不起来。 百度了一下,有人说脚本远程运行的话,远程会话结...
  • (OS 10048)通常每个套接字地址(协议/网络地址/端口)允许使用一次。   启动Tomcat时,碰到了这样的问题,头疼了半天,终于解决了。   是因为80端口已经被占用。   我们可以进入cmd下, 执行命令:...
  • Servlet生命周期笔记

    2020-04-16 11:35:04
    五个阶段 加载 初始化 :init() ,该方法会在Servlet被加载并实例化的以后执行 ...①第一次访问Servlet时会被执行(只执行一次) ②可以修改为Tomcat启动时自动执行 i.Servlet2.5: <Servlet> … ...
  • RAP Deploy的问题

    2010-04-12 15:48:00
    今天对RAP又做了一次部署,可是竟然会出现Tomcat不能解析Zip的错误,经过了无数次的努力,后来发现竟然是因为我用winrar对目录进行了压缩,成为rar然后又将文件改了一个名字,“蠢驴”!千万记住应该使用zip压缩。 ...
  • Servlet 的生命周期

    2021-02-19 12:29:40
    如果Servlet配置了 load-on-startup 参数会在tomcat启动时就创建. 第一次创建时会执行init方法 之后每次请求都执行doGet 或者 doPost方法 销毁:tomcat容器卸载项目或者正常关闭时销毁.销毁前调用destroy方法 ...
  • Servlet的生命周期

    2020-12-17 01:01:11
    init()方法:默认第一次访问Servlet时会被执行(只执行一次) 可以修改为Tomcat启动时就执行,在web.xml文件中添加一以下代码(Servlet2.5版本) <servlet> <servlet-name>Servlet的别名</...
  • 笔记-JavaWeb学习之旅10

    2019-06-09 00:30:00
    Servlet server applet运行在服务器端的小程序,...init方法:只执行一次,Servlet在第一次被访问时或者在服务器启动时被创建,就会执行init方法, service方法:可以执行多次,每一次访问服务器就执行一次 destr...
  • Servlet第三天

    2020-04-03 21:58:07
    Serlvet在tomcat启动后,第一次被请求创建,对象创建后init方法被调用,会被调用一次 每次请求都会执行Service方法,多次调用 当Servlet对象被销毁之前,会执行destroy方法,只能被调用一次 这个过程称之为S...
  • Filter&Listener

    2018-08-23 20:35:56
    过滤器   ...1、Filter对象在tomcat服务器启动时 创建,调用init方法 (会创建一个对象,init方法执行一次) 2、doFilter 每次拦截目标资源时,执行 3、destroy 服务器关闭时执行   ...
  • Servlet生命周期

    2020-05-16 10:13:13
    Servlet生命周期 Servlet类的对象从创建到销毁的...Serlvet在tomcat启动后,第一次请求创建,对象创建后init方法被调用会被调用一次 每次请求都会执行service方法,多次调用 当Servlet对象被销毁之前,会 ...
  • (3)init方法只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的。 【1】多个用户同时访问的时候会产生线程安全问题,那么就尽量不要在Servlet中定义成员变量,即使定义了也不要对其进行改变。 2....
  • 只执行一次,服务器启动时执行 监听器去加载Spring的配置文件,创建WEB版本对象,存储ServletContext对象 <!--配置spring的监听器,默认只加载WEB-INF目录下的applicationContext.xml配置文件--> &
  • 面试题——servlet相关

    2020-09-10 14:49:44
    服务(service):方法被调用进行服务,在项目启动期间可以进行多次服务(请求一次执行一次) 销毁(destory):当服务器关闭进行销毁。销毁一次 Servlet接口中声明3个方法,tomcat在不同的时候将调用不同的...
  • Servlet&&HTTP

    2020-08-15 15:37:48
    被创建:执行init方法,只执行一次 Servlet什么时候被创建? 默认情况下,第一次被访问时,Servlet被创建 可以配置执行Servlet的创建时机。 在标签下配置 第一次被访问时,创建 的值为负数 在服务器启动时,...
  • Servlet的生命周期:从创建到销毁的个过程 【面试题】 生命周期三个阶段 ... tomcat服务器启动时会直接初始化servlet,傎只要大于0,就可以在启动服务器初始化 load-on-startup 2.运行阶段 ...
  • 前言,注意看 Java类运行会被调入内存,servlet也是,启动tomcat时...Servlet加载进入内存,调用init()方法,初始化servlet,且只执行一次; Service方法是servlet真正处理请求的方法; 当tomcat服务器关闭...
  • serlvet

    2018-06-04 17:55:49
    否则servlet实例会在第一次访问的时候被创建 2:执行该servlet的init的方法 3:调用其请求处理方法service方法 4:servlet对象会在tomcat服务器关闭销毁,调用的是destroy方法 servlet是一个单例,会创建一个。...
  • 生命周期 : 从创建到销毁的个过程。 指Servlet创建到销毁的过程。 ...0 会在Tomcat启动的时候直接初始化。 第二阶段:运行阶段 只要初始化了之后Service()方法运行N。 第三阶段:销毁...

空空如也

空空如也

1 2 3 4
收藏数 78
精华内容 31
关键字:

tomcat启动时只执行一次