将Springboot部署到windows服务器上做成服务

在java web开发中,我们使用的是极其方便的springboot,他本身就包含了tomcat,所以,我们不用像从前开发springmvc一样 要先将应用部署到tomcat中,然后启动tomcat才能进行调试程序。 现在,我们只需要启动Application这个类就能轻易的进行调试。 这种方式在liunx服务器上部署没有什么不妥,也是非常的方便。 但是在windows上,就不一样了。 按照正常的启动,我们必须开启命令行窗口,否则应用会随着的命令行窗口的关闭而关闭。这实在是太危险了,稍不注 意就会关闭程序。所以我们的方案是将调试极其方便的springboot在windows上也能够极其方便的部署和维护。即将 springboot做成window服务。 而解决这个问题的办法就是使用一个守护进程来维护程序。 目前通用的解决方案是3个:

  1. 使用Apache 的Wrapper 来维护我们的程序,但不足之处是:收费、64位版本需要购买Licence。放在5年前,或许不用 担忧是否需要64位JVM,但如今,32位仅1.5G的堆内存略显不足。

  2. 使用Apache Commons Daemon,tomcat win安装版用的就是他。tomcat.exe 的图标和他一模一样,但使用不方便。

  3. 也就是我们使用的方案,直接使用tomcat。将tomcat做成windows的服务是那么的简单,只需要使用一行命令即可。 步骤如下:

    1. 首先下载tomcat。解压。
    2. 稍稍修改我们的springboot程序
    • 首先将我们的pom .xml文件的打包方式变成war,jar包是不能够在tomcat中运行的,也不方便 在部署时候修改一些配置。
    • 新增一个类,在于Appliation.java 也就是我们的程序启动类同级的地方新增一个类,继承 SpringBootServletInitializer这个类,并重写configure方法。使返回值指向我们的Application类。 这样我们对程序的修改就完成了。
  4. 使用maven将我们的程序打包,并且复制到我们刚刚下载的tomcat的webapps的目录下,删除其 他所有的目录和文件,只保留我们的war包。

  5. 修改tomcat中conf目录下的server.xml文件,将端口修改成我们需要的端口,有一个要注意的地方 就是在修改端口的时候,如果机器上有多个tomcat,不能有重复的端口,特别是Host标签和connector 标签中的端口不能重 复。

  6. 将tomcat注册到windows服务中。步骤: 将TOMCAT注册成系统服务的好处,就是方便维护,在服务器重启的时候,系统会自动启动系统服务,而不必手动 操作,这就为我们在项目维护时省下不少麻烦。

在项目维护期间有很多客户只要一有问题,就电话招呼,而且是一召唤就得立马出现,如果手上运维的项目比较多 的话,那就会很蛋疼了。将TOMCAT注册成系统服务可以减少很多这样的麻烦,直接叫客户自己重启服务器就OK 了。

注册方法: 1. 在DOS命令行模式下,cd到tomcat的bin目录下。 2.在tomcat的bin目录下可以看到有一个service.bat的批处理文件,这个文件就是为我们将tomcat注册成系统服务所 用。有兴趣的可以打开看看批处理文件里面的内容。 3.执行命令service.bat install 服务名 后面的服务名可以随便取,别跟系统已有的服务名冲突就行。服务名会出现 在服务列表中,方便区分。

如果成功可以看到以下提示信息:

The Service ‘服务名 服务名’ has been installed 如果不需要这个服务了,也可以用简单的命令将其去除就OK 了 前面步骤如上,执行命令:service.bat uninstall 服务名 移除成功的提示信息: The Service ‘服务名’ has been removed。

6 :修改日志路径,导入到我们制定的路径。

7 :最后我们在windows的服务列表中就能看到我们的服务了。点击启动就好了。
最后,我们知道tomcat容器中的应用都是要加后缀的,而我们的springboot是不加后缀的,当我们使用的jmeter的测试用 例都需要加上项目前缀,就很疼了。那怎么解决呢? 我们只需要编辑tomcat 中的conf 目录下的server.xml 文件,在host标签中加入一行代码:

1
<Context path="" docBase="/ccppg-service" debug="0" reloadable="true"/>

path 代表的是访问的路径,docBase对应的是webapps目录的项目相对路径。reloadable=”true” 表示自动重载class文件。 这样,我们重启服务器,就不需要加项目前缀了。注意:如果你的项目里含有需要将文件上传到服务器或者保存到服务器的插件或逻辑,对这个标签必须谨慎对待,这里就是你文件上传的路径。

到此,我们就完成了让springboot发挥他最大的优点:方便调试。也能够在windows中方便的维护我们的程序。不必担心一 不小心关闭了命令行导致的事故,也可以让什么都不懂的人开启或关闭服务。节约了我们的时间。

现在,我们已经将程序部署到服务器上,外网页能通过ip来访问我们了,但是不够友好,我们需要使用域名映射我们的 ip,即访问域名时就转发到我们的ip,不需记住难记的数字。

首先我们申请域名,然后在dns服务商处映射我们的ip地址,映射指定的端口,比如80端口,然后再服务器中使用nginx根 据特定的二级域名转发到我们指定的端口用应。

还有一个就是我们测试的数据库和正式的数据库是不一样的,我们必须修改应用的数据源地址为正式地址,否则一定报 错。我们将测试服务器上的sql文件导出,然后在正式服务器上创建新的数据库,导入我们的sql文件,这样,数据库就建 好了。

现在,一个完整的java web 应用就部署成功了。并且能够方便的管理和维护。


将Springboot部署到windows服务器上做成服务
http://thinkinjava.cn/2017/10/01/2017/2017-10-01-将springboot部署到windows服务器上做成服务/
作者
莫那·鲁道
发布于
2017年10月1日
许可协议