How do I run a Play Framework 2.0 application as a Windows service?
Solution 1:
This worked for me on Windows 7:
- Create folder C:\my_app
-
Go to your Play! app folder in command line and type
play dist
- Copy generated "something-SNAPSHOT" folder to C:\my_app
- Download YAJSW and extract to C:\my_app
-
In C:\my_app\something-SNAPSHOT\ make a new file start.bat and fill it with command like this:
java -cp "C:\my_app\something-SNAPSHOT\lib\*" play.core.server.NettyServer
Save it and launch start.bat. Your play app must start and work as usual. Take a look at server's PID. You will use it in the next step.
-
Now using command prompt go to C:\my_app\yajsw\bat and type
genConfig.bat < PID from previous step >
-
You generated C:\my_app\yajsw\conf\wrapper.conf. Edit this file and change these params like so:
wrapper.ntservice.name=My App Name
wrapper.ntservice.displayname=My App Name
Save file. -
Terminate the start.bat script you started in 6. then, in C:\my_app\yajsw\bat launch
runConsole.bat
If app starts, do aCtrl c
(and answer y) to terminate the batch file and proceed to next step. -
To install service launch (Run as administrator)
installService.bat
-
To start service launch
startService.bat
Now you can see your "My App Name" service in Windows services.
To stop service you can use stopService.bat
. To uninstall it uninstallService.bat
.
Solution 2:
You should take a look at this question: Run Java application as a service
You'll have to use the play dist
command and then adapt the start
script in order to run on Windows.
Solution 3:
If you get an error in step 5. that looks something like this:
Play server process ID is 1132
[info] play - database [default] connected at jdbc:h2:file:db/h2/play
[warn] play - Your production database [default] needs evolutions!
... bunch of SQL statements in the console ...
[warn] play - Run with -DapplyEvolutions.default=true if you want to run them automatically (be careful)
Oops, cannot start the server.
@6gme0o9k5: Database 'default' needs evolution!
Then run the command like this instead:
java -cp "C:\my_app\something-SNAPSHOT\lib\*" -DapplyEvolutions.default=true play.core.server.NettyServer
Two additional items in the process Mikhail described tripped me up:
First, before step 9., make sure you terminate the start.bat script you started in step 6.. Not doing this caused the grief I posted here:
How do I fix server Oops error when deploying Play Framework 2.0 application as a Windows service?
Lastly, make sure you Run as administrator when you open your DOS command window. I could not run the installService.bat script without being administrator when I was doing my deployment.