tomcat 配置多个实例

参考文档

聊聊 Tomcat 的单机多实例 https://www.cnblogs.com/mafly/p/tomcat.html
极客学院 Tomcat 8 权威指南 http://wiki.jikexueyuan.com/project/tomcat/

名词

CATALINA_HOME CATALINA_BASE catalina.bat startup.bat

CATALINA_HOME 指 Tomcat 安装目录,CATALINA_BASE 指实例目录,默认值和 CATALINA_HOME 相同。

CATALINA_HOME 路径下只需要包含 bin 和 lib 目录,而 CATALINA_BASE 只存放 conf、webapps、logs 等这些文件,这样部署的好处在于升级方便,配置及安装文件间互不影响,在不影响 Tomcat 实例的前提下,替换掉 CATALINA_HOME 中的安装文件。

多实例单应用 单实例多应用

生产环境应该使用多实例单应用,而不是单实例多应用。避免 tomcat 重启时对其他应用造成影响。

启动脚本

# startup.bat
set "CATALINA_HOME=D:\chengxu\tomcat\apache-tomcat-7.0.94"
set "CATALINA_BASE=%cd%"
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" call "%EXECUTABLE%" start

实例目录

# 判断文件是否存在
D:\>if exist d:\qq echo true
true
D:\>if exist "d:\qq" echo true
true
D:\>if exist ""d:\qq"" echo true
true
D:\>help start
启动一个单独的窗口以运行指定的程序或命令。 # 用记事本打开文本文件
D:\>start notepad d:\00\a.txt

setlocal 命令

要点:
1. 在批处理文件之外使用无效。
2. setlocal 之后执行的环境改变都是局部的,在遇到 endlocal 或者批处理文件结束时,将环境恢复到 setlocal 之前的状态。
3. setlocal 可以嵌套。也就是在一个批处理文件中可以使用多个 setlocal 命令。 D:\00>setlocal /?
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc772046(v=ws.11)

windows 官方文档 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc772046(v=ws.11)

D:\00>call setlocaldemo.bat

D:\00>rem *******Begin Comment**************

D:\00>rem setlocal 命令测试

D:\00>rem *******End Comment**************
测试
setlocal测试
测试
rem setlocaldemo.bat 文件
rem *******Begin Comment**************
rem setlocal 命令测试
rem *******End Comment**************
@echo off
set var=测试
echo %var%
setlocal
set var=setlocal测试
echo %var%
endlocal
echo %var%

延迟环境变量扩展

名词

变量扩展 延迟环境变量扩展 !变量名! %变量名%

参考文档

命令 setlocal enabledelayedexpansion
https://blog.csdn.net/jiacai2050/article/details/15029815 延迟环境变量扩展https://baike.baidu.com/item/%E5%BB%B6%E8%BF%9F%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E6%89%A9%E5%B1%95/2259702?fr=aladdin

为什么需要延迟环境变量扩展?

修正变量扩展存在问题,一条语句中更新变量后使用的还是更新前的值。

batch解释器的运行机制,一般来说包括如下三个步骤:
1.读取一个完整的命令并进行语法检查。
2.将 %变量名% 替换成变量内容,即变量扩展。
3.执行这个命令。 问题:导致一条语句中更新变量后使用的还是更新前的值

不启用延迟环境变量扩展

# 文件
@echo off
set foo="helloworld"
if %foo%=="helloworld" (
set foo="helloubuntu"
echo !foo!
echo %foo%
) D:\00>delayed.bat
!foo!
"helloworld"
# 分析 没有启用延迟变量扩展机制,!变量名! 是不被识别的,存在一条语句中更新变量使用的还是更新前的值的问题。

启用延迟环境变量扩展

# 文件
@echo off
setlocal enabledelayedexpansion
set foo="helloworld"
if %foo%=="helloworld" (
set foo="helloubuntu"
echo %foo%
echo !foo!
if %foo%=="helloubuntu" echo helloubuntu not delayed
if !foo!=="helloubuntu" echo helloubuntu enabledelayedexpansion
set foo="hellocentos"
echo %foo%
echo !foo!
if %foo%=="hellocentos" echo hellocentos not delayed
if !foo!=="hellocentos" echo hellocentos enabledelayedexpansion
) D:\>d:\00\delayed2.bat
"helloworld"
"helloubuntu"
helloubuntu enabledelayedexpansion
"helloworld"
"hellocentos"
hellocentos enabledelayedexpansion
# 分析 启动延迟变量扩展机制,%变量名% 仍然有效。 !变量名! 的方式使用变量解决了一条语句中更新变量使用的是更新后的值。

batch 命令行参数

参考文档

bat获取所有的参数 https://www.cnblogs.com/cool-fire/p/5919667.html
# bat默认只能获取到1-9个参数,分别用%1 %2 ... %9引用,如果传给bat的参数大于9个,就必须用shift
# 循环读取命令行参数, 2个标签实现循环。
@echo off
set args=
:setArgs
if "%1"=="" goto :doneSetArgs
set args=%args% %1
shift
goto :setArgs
:doneSetArgs
echo %args% # 注意事项 set x = 5 和 set x= 5 是完全不一样的。等号右边由空格的将被当成另一个环境变量。
# 注意区分下面3个 set 语句的区别
set x=5
set x= 5
set x = 5

startup.bat 中关键变量

%CATALINA_HOME%\bin\catalina.bat %CMD_LINE_ARGS% %EXECUTABLE%

tomcat 多实例部署的更多相关文章

  1. Tomcat多实例部署

    前言 以前总是采用很Low的方式太同一台服务器上部署多个Web应用,步骤是这样的:Copy Tomcat目录-->更改conf/server.xml三个端口号----->部署war包--- ...

  2. 性能测试二十:环境部署之Tomcat多实例部署+日志监控

    一个tomcat性能有限,所以需要部署等多个tomcat 单实例部署与windows下类似,项目包放到webapp目录下,启动bin目录下的startup.sh即可启动命令:./startup.sh启 ...

  3. 19.Tomcat多实例部署及负载均衡、动静分离

    Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...

  4. 搭建Tomcat应用服务器、tomcat虚拟主机及Tomcat多实例部署

    一.环境准备 系统版本:CentOS release 6.6 (Final) x86_64 Tomcat版本:tomcat- JDK版本:jdk-8u25-linux-x64 关闭防火墙 软件包下载地 ...

  5. CentOS6.6从头到尾部署nginx与tomcat多实例 转

    前提条件: 1.需要一个全新的centos系统(本文中用到是centos6.6) 2.vmware虚拟机 3.vmware下安装centos系统,以NAT方式与宿主机相连 4.在centos系统中pi ...

  6. tomcat单机多实例部署

    最近在面试的过程中,一家公司在面试时提到了有关tomcat单机多实例部署的提问, 正好, 之前使用IntelliJ IDEA 13.1.4这款IDE开发web项目,在开发的过程中,因为有多个web项目 ...

  7. Tomcat学习总结(10)——Tomcat多实例冗余部署

    昨天在跟群友做技术交流的时候,了解到,有很多大公司都是采用了高可用的,分布式的,实例沉余1+台.但是在小公司的同学也很多,他们反映并不是所有公司都有那样的资源来供你调度.往往公司只会给你一台机器,因为 ...

  8. tomcat单应用多实例部署报错 应用jar不存在

    使用tomcat部署war包,同一环境有tomcat7和tomcat8两个应用,我这边使用tomcat7, 应用部署在其他目录,通过在启动脚本中设置CATALINA_HOME和CATALINA_BAS ...

  9. CentOS6.6从头到尾部署nginx与tomcat多实例

    前提条件: 1.需要一个全新的centos系统(本文中用到是centos6.6) 2.vmware虚拟机 3.vmware下安装centos系统,以NAT方式与宿主机相连 4.在centos系统中pi ...

随机推荐

  1. mod35云掩膜产品用法

    在网上一直没找到一个明确说怎么用MOD35产品的,都是说去看用户手册,第一次看了过一段时间我又忘记怎么搞了,赶紧记下来. 而且现在才发现第一次自己搞的都弄错了. 简单的判断是否是云,只要读取mod35 ...

  2. c++性能测试工具:计算时间复杂度

    有时候除了测量算法的具体性能指数,我们也会希望测试出算法的时间复杂度,以便我们对待测试的算法的性能有一个更加直观的了解. 测量时间复杂度 google benchmark已经为我们提供了类似的功能,而 ...

  3. 关于App收集个人信息基本规范,这里公开征求你的意见!

    关于App收集个人信息基本规范,这里公开征求你的意见! https://www.thepaper.cn/newsDetail_forward_4122573 以后国家开始规范App收集个信息基本规范, ...

  4. C# HTTP系列3 HttpWebRequest.ContentType属性

    系列目录     [已更新最新开发文章,点击查看详细] 获取或设置请求的 Content-type HTTP 标头的值.默认值为null. 常见的请求内容类型为以下几种: /// <summar ...

  5. Golang(九)简单 Goroutine 池实现

    0. 前言 最近使用 Golang 写一个并发执行的测试脚本 之前习惯使用 Java,习惯性想先建一个线程池.然后意识到 Golang 没有封装好的线程池 结合之前学习的 Goroutine 原理和 ...

  6. rust下根据protobuf的消息名创建对象实例

    在C++里面, 我们可以根据一个消息的名称, 动态的创建一个实例 google::protobuf::Descriptor* desc = google::protobuf::DescriptorPo ...

  7. vertica单节点故障恢复 Startup Failed, ASR Required

    测试环境的vertica是单节点的,无法做到故障自动恢复,需要手工处理.案例如下: 发现5433端口连接不上,vertica挂了,手工运行admintools,重新启动vertica,仍然失败,提示: ...

  8. update改数据详解

    update修改数据的要素  : 改哪张表? 改哪几列的值? 分别改成什么值? 在哪些行生效?(这个很重要,否则所有行都会受影响) mysql> update class ; where 表达式 ...

  9. golang 学习笔记 ---JSON

    JSON解析到结构体 在介绍这部分之前先简要介绍一下Json语法 JSON 语法是 JavaScript 语法的子集.JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中 ...

  10. Jenkins的使用(一)

    Jenkins 介绍: Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成 变成可能.前身是Huds ...