介绍
介绍
今天我们学习一下如何将我们的SpringBoot项目发布到Tomcat服务器上面。
SpringBoot和其他框架不太一样,它自己是捆绑了Tomcat服务器的,所以我们说将SpringBoot项目发布到Tomcat服务器,其实就是把SpringBoot运行起来而已。
如果要发布到现有的Tomcat服务器上面的话,还需要进行一些调整,这个福哥也会教给大家。
Tomcat
首先,福哥要说一下,在微服务时代大家都是玩Docker的,既然要发布到Tomcat自然想到的是利用tomcat作为基础镜像来设计自己的镜像,但是。。。
使用官方的tomcat镜像是无论如何都无法部署SpringBoot框架开发的项目!!!
所以,福哥只能从官网下载tomcat和jdk的软件包来自己安装了。大家也会觉得这种方式真的很恶心吧?所以这种方式部署SpringBoot项目只是学习一下就好~
打包war
要知道一件事情,要把SpringBoot项目发布到Tomcat服务器上面,需要把项目打包成war格式的压缩包。
首先,把下面的启动程序对象改为扩展自SpringBootServletInitializer对象。
@SpringBootApplication @EnableJpaAuditing public class TfspringApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(TfspringApplication.class, args); } }
然后,在pom.xml里面的project节点下面增加war设定。
<packaging>war</packaging>
这样就可以了!!
Dockerfile
下载tomcat
福哥给出tomcat的官方下载地址,大家可以进去自己下载。
https://tomcat.apache.org/download-90.cgi
下载JDK
福哥给出JDK的官方下载地址,大家可以进去自己下载。现在从oracle下载JDK需要注册了,需要一个电子邮箱就可以注册oralce的账号,然后就可以下载了!
https://www.oracle.com/java/technologies/downloads/#java8
Dockerfile
福哥使用的是centos:7作为基础镜像,虽然比较大,但是工具比较齐全,用起来顺手~~
首先,把tomcat和jdk解压出来,通过ADD命令直接就可以解压缩了,只不过需要直接改一下文件夹名称。
然后,将war包复制到webapps下面,使用ROOT.war这个文件名可以部署到根目录上面。
最后,通过catalina.sh脚本启动tomcat服务。
FROM centos:7 MAINTAINER Andy Bogate MAINTAINER tongfu@tongfu.net MAINTAINER https://tongfu.net/dockerfile MAINTAINER 2021/11/17 MAINTAINER v1.0.0 ENV tomcatRoot=/usr/local/tomcat ENV serverPort 8080 ENV xms 128m ENV xmx 512m ENV JAVA_HOME=/usr/local/jdk EXPOSE ${serverPort} # packages ADD apache-tomcat-9.0.54.tar.gz /usr/local/ ADD jdk-8u202-linux-x64.tar.gz /usr/local/ RUN mv /usr/local/apache-tomcat-9.0.54/ /usr/local/tomcat/ \ && rm -rf /usr/local/tomcat/webapps/* \ && mv /usr/local/jdk1.8.0_202/ /usr/local/jdk/ # copy jar COPY tfspring-1.0.0-RELEASE.war ${tomcatRoot}/webapps/ROOT.war # work directory WORKDIR ${tomcatRoot} # entry point ENTRYPOINT ["sh", "-c", "${tomcatRoot}/bin/catalina.sh run"]
部署
首先,福哥通过docker build创建镜像。
docker build -f Dockerfile -t springboot/tomcat ./
然后,福哥使用springboot/tomcat镜像启动一个容器。
这里使用了bridge2网络是为了可以直接访问docker-compose的服务。
docker run -tid --name springboot-tomcat -h springboot-tomcat --net bridge2 -p 8080:8080 springboot/tomcat
测试
切入容器里面看看,里面有Tomcat的目录结构。
查看catalina日志文件发现有部署信息,却没有看到SpringBoot启动信息。其实这个不用担心,如果部署出错了还是可以看到错误信息的。
docker exec -ti springboot-tomcat bash
通过浏览器测试一下看看!!
OpenJDK
SpringBoot官方推荐的是使用openjdk为基础镜像设计自己的镜像,
Dockerfile
福哥使用的是openjdk:11-jre-slim作为基础镜像的,为了和tomcat镜像同步,福哥自己建立了/usr/local/tomcat目录,并且在下面建立了webapps和logs子目录,最后像tomcat镜像一样把WORKDIR设置到了/usr/local/tomcat这个目录上面。
福哥把tfspring项目的打包到了镜像里面了,这个jar可以通过java直接运行起来,不用做任何调整!
FROM openjdk:11-jre-slim MAINTAINER Andy Bogate MAINTAINER tongfu@tongfu.net MAINTAINER https://tongfu.net/dockerfile MAINTAINER 2021/11/17 MAINTAINER v1.0.0 ENV tomcatRoot=/usr/local/tomcat ENV serverPort 8080 ENV xms 128m ENV xmx 512m EXPOSE ${serverPort} # make directory RUN mkdir -p ${tomcatRoot}/webapps/ \ && mkdir -p ${tomcatRoot}/logs/ # copy jar COPY tfspring-0.0.1-SNAPSHOT.jar ${tomcatRoot}/webapps/ROOT.jar # work directory WORKDIR ${tomcatRoot} # entry point ENTRYPOINT ["sh", "-c", "java -Dserver.port=${serverPort} -Xms${xms} -Xmx${xmx} -jar webapps/ROOT.jar > logs/calatina.out"]
部署
首先,福哥通过docker build创建镜像。
docker build -f Dockerfile -t springboot/openjdk ./
然后,福哥使用springboot/openjdk镜像启动一个容器。
docker run -tid --name springboot-openjdk -h springboot-openjdk -p 8080:8080 springboot/openjdk
测试
切入容器里面看看,里面有福哥建立的目录结构。
查看catalina.out日志文件可以看到SpringBoot启动信息。
docker exec -ti springboot-openjdk bash
通过浏览器测试一下看看!!
总结
今天福哥带着童鞋们学习了如何将SpringBoot发布到Tomcat服务器的方法,顺应微服务的潮流,福哥是通过Docker的方式实现了Tomcat的环境部署的。
SpringBoot自成一体,它不需要像常规Java项目那样通过Tomcat的war压缩包来完成自动部署,而是通过jar包直接通过java运行的,这个不得不说确实是简单方便。