GVKun编程网logo

Java web实现TOMCAT启动时加载程序里的定时器(java web tomcat启动执行方法)

17

本文将介绍Javaweb实现TOMCAT启动时加载程序里的定时器的详细情况,特别是关于javawebtomcat启动执行方法的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主

本文将介绍Java web实现TOMCAT启动时加载程序里的定时器的详细情况,特别是关于java web tomcat启动执行方法的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Centos 7 java 安装 及 tomcat启动、Centos7+Tomcat8 配置 javaweb 环境,tomcat 启动巨慢的问题、java 之 jsp tomcat启动失败问题、JavaWeb Tomcat 怎样实properties文件的实时加载?的知识。

本文目录一览:

Java web实现TOMCAT启动时加载程序里的定时器(java web tomcat启动执行方法)

Java web实现TOMCAT启动时加载程序里的定时器(java web tomcat启动执行方法)

下面就Servlet侦听器结合Java定时器来讲述整个实现过程。要运用Servlet侦听器需要实现 javax.servlet.ServletContextListener接口,同时实现它的contextInitialized和contextDestroyed两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入contextInitialized,把销毁的过程置入contextDestroyed了。我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器, 示例代码如下所示:

package com.ganinfo.sc.cwe.user.util;

import java.util.Date;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;

/**
 * 定时任务
 * @author ruikanwang
 *
 */
public class TimingListener extends HttpServlet implements ServletContextListener{

	
	private static final long serialVersionUID = 1L;
	private java.util.Timer timer = null;
	@Override
	public void contextDestroyed(ServletContextEvent event) {
		  timer.cancel();
		  event.getServletContext().log("定时器销毁");
	}

	@Override
	public void contextInitialized(ServletContextEvent event) {
		timer = new java.util.Timer(true);
		event.getServletContext().log("获取app版本定时器已启动");
		System.out.println("开始执行时间"+new Date());
		timer.schedule(new ExTask(event.getServletContext()), 0, 5*60*1000);
		event.getServletContext().log("已经添加任务调度表");
	}
	

}

以上代码timer.schedule(new ExTask(event.getServletContext()), 0, 5601000)这一行为定时器调度语句,其中ExTask是自定义需要被调度的执行任务

ExTask.java代码

public class ExTask extends TimerTask {
	private static boolean isRunning = false;
	private ServletContext context = null;

	public ExTask(ServletContext context) {
		this.context = context;
	}

	@Override
	public void run() {
		if (!isRunning) {
			isRunning = true;
			context.log("开始执行指定任务");
			String BASEURL=SystemConfig.getParam("APP_timing_version");
			try {
				doGetStr(BASEURL);//此处为执行代码
			} catch (ParseException | IOException e) {
				e.printStackTrace();
			}
			isRunning = false;
			context.log("指定任务执行结束");
		} else {
			context.log("上一次任务执行还未结束");
		}
	}
}

做完上面这些我们只是完了一个个定时器的设定,如果想要在tomcat启动时就加载,必须要配置web.xml, web.xml配置的内容如下

<listener> <listener-class>com.tjsoft.buisness.util.ContextListener</listener-class> </listener>

注意: 此监听器放在其他监听器后面防止读取不到配置文件情况

Centos 7 java 安装 及 tomcat启动

Centos 7 java 安装 及 tomcat启动

运行tomcat 需要安装java环境:

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载了:jdk-8u144-linux-x64.rpm

卸载之前的openjdk

:rpm -qa | grep -E'^open[jre|jdk]|j[re|dk]'

:yum remove java-1.8.0-openjdk

:yum remove java-1.8.0-openjdk-headless


安装:rpm -ivh jdk-8u144-linux-x64.rpm

:环境变量 export JAVA_HOME=/usr/java/default


tomcat daemon.sh 启动 操作步骤:

wgethttp://archive.apache.org/dist/tomcat/tomcat-8/v8.5.12/bin/apache-tomcat-8.5.12-deployer.tar.gz
tar-zxvfapache-tomcat-8.5.12-deployer.tar.gz
mvapache-tomcat-8.5.12-deployer/data/app/tomcat/

cd/data/app/tomcat/bin/
tar-zxvfcommons-daemon-native.tar.gz
cdcommons-daemon-1.0.15-native-src/unix
./configure
make
cpjsvc../..
./daemon.shstart

ok


系统启动 :


cd/usr/lib/systemd/system
vimtomcat.service
[Unit]
Description=Tomcat
After=syslog.targetnetwork.targetremote-fs.targetnss-lookup.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/java/default
ExecStart=/data/app/tomcat/bin/daemon.shstart
ExecStop=/data/app/tomcat/bin/daemon.shstop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctldaemon-reload
systemctlenabletomcat.service
systemctlstoptomcat.service

Centos7+Tomcat8 配置 javaweb 环境,tomcat 启动巨慢的问题

Centos7+Tomcat8 配置 javaweb 环境,tomcat 启动巨慢的问题

去年刚开始遇到这样的问题很郁闷,总以为是服务器的问题,网上的也不好找到很好的答案,花了不少时间,现在感觉这样的问题多了网上的答案也随之很多

    启动巨慢问题分析:

启动慢主要是卡在初始化 Session, 通过搜索和分析,Tomcat 的 SessionID 是通过 SHA1PRNG 算法计算得到的,SHA1 算法需要一个密钥,这个密钥在 Tomcat 启动的时候随机生成一个,生成是使用了 Linux 随机函数生成器 /dev/random。读取它相当于生成随机数字。搜索 /dev/random,大概知道是什么鬼了:/dev/random 会根据 噪音 产生随机数,如果噪音不够它就会阻塞。Linux 是通过 I/O,键盘终端、内存使用量、CPU 利用率等方式来收集噪音的,如果噪音不够生成随机数的时候就会被阻塞

 

解决方案 A 和 B

A. 使用伪随机函数生成器 /dev/unrandom /dev/urandom 并不是真正的随机行为 (其实一般不容易重复),主要有两个地方可以修改。


  • 通过修改 Tomcat 启动文件 -Djava.security.egd=file:/dev/urandom
  • 通过修改 JRE 中的 java.security 文件 securerandom.source=file:/dev/urandom

B. 增大 /dev/random 的熵池(推荐) 问题的原因是由于熵池不够大,所以增大它是最彻底的方法。我们可以通过软件的方法实现,下面是软件的安装和配置流程。


  • 安装熵服务
    yum install rng-tools
  • 启动熵服务
    systemctl start rngd
  • 如果你的 CPU 不支持 DRNG 特性或者像我一样使用虚拟机,可以使用 /dev/unrandom 来模拟。
       cp /usr/lib/systemd/system/rngd.service/etc/systemd/system   vim /etc/systemd/system/rngd.service  # 以下是编辑内容  ExecStart=/sbin/rngd -f -r /dev/urandom
  • 重新载入服务
       systemctl daemon-reload  systemctl restart rngd

经过上面的修改,我们再观察 /proc/sys/kernel/random/entropy_avail 基本上在 3000 左右。这个时候重新启动 Tomcat,发现启动时间正常。

 

这两种方案 A 自己没有试过,也是网上看的,我一般用的是 B 方案,安装熵服务和启动熵服务这两步操作就可以了,最好是在 linux 的根目录下操作

java 之 jsp tomcat启动失败问题

java 之 jsp tomcat启动失败问题

问题描述:

创建了一个helloServlet

代码如下

package Test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class helloServlet
 */
@WebServlet("/helloServlet")
public class helloServlet extends HttpServlet {
//    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public helloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setCharacterEncoding("GBK");
        response.getWriter().write("你好 世界");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

接着配置

web.xml

代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>haha</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  <!-- 类名 -->
      <servlet-name>helloServlet</servlet-name>
      <!-- 类所在的包路径 -->
      <servlet-class>Test.helloServlet</servlet-class>
   </servlet>
  <!-- 映射路径 -->
  <servlet-mapping>
  
  <servlet-name>helloServlet</servlet-name>
  <url-pattern>TomcatTest/helloServlet</url-pattern>
  </servlet-mapping>
 
</web-app>

启动server

报错错误如下

 Server Tomcat v7.0 Server at localhost failed to start.

日志:

十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version:        Apache Tomcat/7.0.92
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server built:          Nov 9 2018 11:07:44 UTC
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server number:         7.0.92.0
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name:               Windows 10
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Version:            10.0
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Architecture:          amd64
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java Home:             C:\Program Files\Java\jre1.8.0_161
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Version:           1.8.0_161-b12
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Vendor:            Oracle Corporation
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE:         D:\Eclipse_WorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME:         D:\apache-tomcat-7.0.92
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=D:\Eclipse_WorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\apache-tomcat-7.0.92
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=D:\Eclipse_WorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:\apache-tomcat-7.0.92\endorsed
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=GBK
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: Loaded APR based Apache Tomcat Native library 1.2.18 using APR version 1.6.5.
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL
信息: OpenSSL successfully initialized (OpenSSL 1.1.1  11 Sep 2018)
十二月 28, 2018 8:45:59 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-apr-8080"]
十二月 28, 2018 8:45:59 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-apr-8009"]
十二月 28, 2018 8:45:59 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 439 ms
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Catalina
十二月 28, 2018 8:45:59 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.92
十二月 28, 2018 8:45:59 下午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
警告: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [182] milliseconds.
十二月 28, 2018 8:46:00 下午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    ... 6 more
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> TomcatTest/helloServlet in servlet mapping
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3471)
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3446)
    at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1439)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1352)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5566)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 6 more

十二月 28, 2018 8:46:00 下午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:444)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:758)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:710)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1254)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 6 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
    ... 8 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    ... 6 more
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> TomcatTest/helloServlet in servlet mapping
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3471)
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3446)
    at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1439)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1352)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5566)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 6 more

十二月 28, 2018 8:46:00 下午 org.apache.catalina.startup.Catalina start
严重: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:710)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:758)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:444)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1254)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 11 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
    ... 13 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1254)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 6 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1243)
    ... 8 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/haha]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    ... 6 more
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> TomcatTest/helloServlet in servlet mapping
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3471)
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3446)
    at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1439)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1352)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5566)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 6 more

十二月 28, 2018 8:46:00 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-apr-8080"]
十二月 28, 2018 8:46:00 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-apr-8009"]
十二月 28, 2018 8:46:00 下午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
十二月 28, 2018 8:46:00 下午 org.apache.coyote.AbstractProtocol destroy
信息: Destroying ProtocolHandler ["http-apr-8080"]
十二月 28, 2018 8:46:00 下午 org.apache.coyote.AbstractProtocol destroy
信息: Destroying ProtocolHandler ["ajp-apr-8009"]

 

 

解决方案:

根据日志可以分析出可能跟web.xml有关

推测是否是eclipse自动会设置映射路径,于是删掉配置的servlet

代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>haha</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
 
</web-app>

启动server

成功

问题解决

 

JavaWeb Tomcat 怎样实properties文件的实时加载?

JavaWeb Tomcat 怎样实properties文件的实时加载?

期望结果:手动修改properties文件中的该参数值后,不需要重启Tomcat(或重新发布),该新参数值要求立即在程序中生效。

我的主要代码:

URL url=TestClass.class.getClassLoader().getResource("test.properties");
String path=URLDecoder.decode(url.getPath(),"UTF-8");
Properties props=new Properties();
props.load(new FileInputStream(path));

String xxx=props.getProperty("yyy");

以上,当修改了yyy对应的参数值后,取得的xxx值仍然为修改前的值,而当重启Tomcat后,就可以取到修改后的值了!

补充说明:只是修改了properties文件,别的都没修改而重启Tomcat(或重新部署整个项目),感觉这样不值当!

在网上找到一个解决方法:将文件中的数据先读入内存,然后用户修改后再去修改内存中的数据和配置文件中的数据,然后读数据时只需要从内存中读取,但不知道此方法是怎样实现的!

所以,想求知:实时加载properties要如何实现(JavaWeb项目中,重启Tomcat和重新发布项目的方法除外)?





关于Java web实现TOMCAT启动时加载程序里的定时器java web tomcat启动执行方法的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Centos 7 java 安装 及 tomcat启动、Centos7+Tomcat8 配置 javaweb 环境,tomcat 启动巨慢的问题、java 之 jsp tomcat启动失败问题、JavaWeb Tomcat 怎样实properties文件的实时加载?的相关信息,请在本站寻找。

本文标签: