http://www.littlefisher.site/2018/06/27/Jetty9%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E/
公司所使用的Jetty
版本还是Jetty7
,最近一方面是有想法把公司的Jetty
版本升级为最新,另外也让自己熟悉一下Jetty
的使用与配置,也算是对自己的一个提升吧。公司内对技术的看重程度较低,只能通过公司内点点滴滴的技术问题修复,来间接提升自己的能力。这边博文就是为了说明一下Jetty9
如何做到所有的配置都集于一个文件,避免每次部署新的Jetty
都要在各个文件中来来回回的修改文件。
基础命令
在Jetty
的根目录下执行以下命令
1 | java -jar start.jar --add-to-start=console-capture |
上面命令中的console-capture
为功能,Jetty
默认仅开启一部分功能,其他所需的功能,通过以上命令,可以自己来添加。添加成功后,会在start.ini
中新增该功能的配置项。
如果需要一次新增多个功能,执行下面命令
1 | java -jar start.jar --add-to-start=console-capture,jvm |
这个命令新增了console-capture
和jvm
这2
个功能。具体功能是干嘛用的,后面做描述。
1 | java -jar start.jar --list-config |
以上命令用于展示出当前Jetty
已启动的功能及已配置的参数
当前公司所需Jetty
功能
console-capture
该功能用于开启Jetty
的日志打印功能
执行下面命令开启该功能
1 | java -jar start.jar --add-to-start=console-capture |
该功能在start.ini
中所对应的配置参数如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # --------------------------------------- # Module: console-capture # Redirects JVMs console stderr and stdout to a log file, # including output from Jetty's default StdErrLog logging. # --------------------------------------- --module=console-capture ## Logging directory (relative to $jetty.base) # jetty.console-capture.dir=logs ## Whether to append to existing file # jetty.console-capture.append=true ## How many days to retain old log files # jetty.console-capture.retainDays=90 ## Timezone of the log timestamps # jetty.console-capture.timezone=GMT |
以上内容为执行了命令后自动在start.ini
中生成的文件,下面附上一份说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # --------------------------------------- # Module: console-capture # Redirects JVMs console stderr and stdout to a log file, # including output from Jetty's default StdErrLog logging. # --------------------------------------- --module=console-capture ## 日志存放位置,默认是当前Jetty的跟目录下的logs目录,该配置一般需要修改为多个jetty统一的日志存放位置,例如/data/logs/jettyDEMO # jetty.console-capture.dir=logs ## 重启服务后,是否接着之前的日志文件继续打印,默认是false # jetty.console-capture.append=true ## 老的日志文件存放多久,默认是90天 # jetty.console-capture.retainDays=90 ## 日志文件的时区配置,默认是GMT,针对于咱们国家而言,由于是东八区,所以配置为Asia/Shanghai # jetty.console-capture.timezone=GMT |
jvm
该模块用于配置Jetty
启动时的jvm
参数
执行下面命令开启该功能
1 | java -jar start.jar --add-to-start=jvm |
该功能在start.ini
中所对应的配置参数如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # --------------------------------------- # Module: jvm # A noop module that creates an ini template useful for # setting JVM arguments (eg -Xmx ) # --------------------------------------- --module=jvm ## JVM Configuration ## If JVM args are include in an ini file then --exec is needed ## to start a new JVM from start.jar with the extra args. ## ## If you wish to avoid an extra JVM running, place JVM args ## on the normal command line and do not use --exec # --exec # -Xmx2000m # -Xmn512m # -XX:+UseConcMarkSweepGC # -XX:ParallelCMSThreads=2 # -XX:+CMSClassUnloadingEnabled # -XX:+UseCMSCompactAtFullCollection # -XX:CMSInitiatingOccupancyFraction=80 # -internal:gc # -XX:+PrintGCDateStamps # -XX:+PrintGCTimeStamps # -XX:+PrintGCDetails # -XX:+PrintTenuringDistribution # -XX:+PrintCommandLineFlags # -XX:+DisableExplicitGC |
以上内容为执行了命令后自动在start.ini
中生成的文件,下面附上一份说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # --------------------------------------- # Module: jvm # A noop module that creates an ini template useful for # setting JVM arguments (eg -Xmx ) # --------------------------------------- --module=jvm ## JVM Configuration ## 由于Jetty启动之后才能读取这个配置文件,所以说其实并没有加载这里的JVM参数。而使用--exec的话,会额外启动一个进行用于加载这里的JVM配置参数。除非说JVM的配置参数是写死在bin/jetty.sh里,否则--exec是必须要带的。 --exec -Xms512m -Xmx768m # -Xmx2000m # -Xmn512m # -XX:+UseConcMarkSweepGC # -XX:ParallelCMSThreads=2 # -XX:+CMSClassUnloadingEnabled # -XX:+UseCMSCompactAtFullCollection # -XX:CMSInitiatingOccupancyFraction=80 # -internal:gc # -XX:+PrintGCDateStamps # -XX:+PrintGCTimeStamps # -XX:+PrintGCDetails # -XX:+PrintTenuringDistribution # -XX:+PrintCommandLineFlags # -XX:+DisableExplicitGC |
Jetty
启动
进入Jetty
根目录下的bin
目录,执行如下命令
1 2 3 | sh jetty.sh start # 启动Jetty sh jetty.sh restart # 重启Jetty sh jetty.sh stop # 停止Jetty |
命令就是这么简单
设置contextPath
在Jetty
根目录的webapps
下,新增跟war
包同名的xml
文件,例如有一个war
包叫做hsjry-credit-deploy.war
,则新增一个hsjry-credit-deploy.xml
文件,文件中是以下内容
1 2 3 4 5 6 | <?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/blog-web</Set> <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/hsjry-credit-deploy.war</Set> </Configure> |
通过这种方式设置contextPath
代码中Jetty
版本升级
由于部署所有的Jetty
版本都已经升级,未避免开发人员自测时和部署时由于环境不同导致的bug
,所以建议代码中也把Jetty
版本进行升级。另外maven
中针对于Jetty
的groupId
都已经进行了变更,原本的版本都已经不做维护了。
以下内容是credit
模块deploy
工程的pom.xml
里,关于Jetty
容器原来的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <build> <finalName>hsjry-credit-deploy</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.26</version> <configuration> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>8086</port> <port>8097</port> <maxIdleTime>30000</maxIdleTime> </connector> </connectors> <!-- 自动发现改变是时间,进行热部署,默认是0,不热部署 <scanIntervalSeconds>1</scanIntervalSeconds> --> <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory> <webAppConfig> <contextPath>/hsjry-credit-deploy</contextPath> </webAppConfig> <reload>automatic</reload> <systemProperties> <systemProperty> <name>org.mortbay.util.URI.charset</name> <value>UTF-8</value> </systemProperty> </systemProperties> </configuration> </plugin> </plugins> </build> |
以下内容是新版本Jetty
进行配置的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <build> <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.9.v20180320</version> <configuration> <!--自动发现改变是时间,进行热部署,默认是0,不热部署--> <scanIntervalSeconds>10</scanIntervalSeconds> <!--手动重加载 可选值 :[automatic|manual]--> <reload>automatic</reload> <httpConnector> <port>8097</port> <idleTimeout>30000</idleTimeout> </httpConnector> <webApp> <contextPath>/hsjry-credit-deploy</contextPath> </webApp> <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory> <!-- jetty9.3+版本的默认字符集已使用UTF-8,无需再进行配置 https://github.com/eclipse/jetty.project/issues/804 --> </configuration> </plugin> </plugins> </build> |