PlayFramework 1.x 生产环境部署 源码编译

最近一直在使用playframework,一个高性能快速开发的框架,非常推荐尝试,在生产环境部署的时候遇到了一些问题,这里做下记录。

首先查看了下官方的文档 1.4.x/deployment 官方提到了几种方式

1. 独立的play应用(前面是nginx或者apache)

1.4.x/production
这种方式就是play依然是用常用方法启动,比如 play start app这样的方式,在play的前面做一个nginx的代理和负载均衡就可以,play提供了PROD模式,在PROD模式下会关闭代码的实时检测和热部署功能,也会做提前初始化数据库连接等操作,提高性能,但是这种模式有一个最大的问题是,你需要把你的源码也部署在你的服务器上。所以我们尝试了第二种方式

2. 使用JavaEE服务器

1.4.x/deployment
比如说常用的Tomcat,Jetty等,和我们普通开发SpringMVC项目一样,最终项目产出一个War包,然后部署到这些中间件中。

play提供了相关的命令:

play war myapp -o myapp.war

但是我们在使用了这种方式之后,发现了一些诡异的问题,比如相关资源加载不到等,网上也有一些朋友遇到了奇怪的问题 https://github.com/playframework/play1/issues/1206 最终我们也放弃了这种方法。

3. 使用precompile方式

在研究这个问题的时候,我查看了play的命令行选项,发现了一个命令

precompile      Precompile all Java sources and templates to speed up application start-up

这个命令的解释是预编译所有的java源码和模板来加速项目启动,后来在一个老版本文档中终于发现了终极解决方案
war-archives-are-fully-precompiled

play start myApp -Dprecompiled=true

你可以提前使用precompile编译你的所有源码,然后通过 play start myApp -Dprecompiled=true 的方式,来直接启动项目,并不需要你的源码,这样我们的实际构建过程就是

play clean
play deps --verbose
play precompile
zip -r web.zip conf modules lib precompiled public

先清理缓存,加载依赖,预编译,然后打包成一个zip文件,之后在生产环境上

play start web -Dprecompiled=true

就可以啦

原文地址:https://www.cnblogs.com/hzcya1995/p/13317437.html