55.2 Heroku
Heroku is another popular PaaS platform. To customize Heroku builds, you provide a Procfile
, which provides the incantation required to deploy an application. Heroku assigns a port
for the Java application to use and then ensures that routing to the external URI works.
You must configure your application to listen on the correct port. Here’s the Procfile
for our starter REST application:
web: java -Dserver.port=$PORT -jar target/demo-0.0.1-SNAPSHOT.jar
Spring Boot makes -D
arguments available as properties accessible from a Spring Environment
instance. The server.port
configuration property is fed to the embedded Tomcat, Jetty or Undertow instance which then uses it when it starts up. The $PORT
environment variable is assigned to us by the Heroku PaaS.
Heroku by default will use Java 1.8. This is fine as long as your Maven or Gradle build is set to use the same version (Maven users can use the java.version property). If you want to use JDK 1.7, create a new file adjacent to your pom.xml
and Procfile
, called system.properties
. In this file add the following:
java.runtime.version=1.7
This should be everything you need. The most common workflow for Heroku deployments is to git push
the code to production.
$ git push heroku master Initializing repository, **done**. Counting objects: 95, **done**. Delta compression using up to 8 threads. Compressing objects: 100% (78/78), **done**. Writing objects: 100% (95/95), 8.66 MiB | 606.00 KiB/s, **done**. Total 95 (delta 31), reused 0 (delta 0) -----> Java app detected -----> Installing OpenJDK 1.8... **done** -----> Installing Maven 3.3.1... **done** -----> Installing settings.xml... **done** -----> Executing: mvn -B -DskipTests=true clean install [INFO] Scanning for projects... Downloading: http://repo.spring.io/... Downloaded: http://repo.spring.io/... (818 B at 1.8 KB/sec) .... Downloaded: http://s3pository.heroku.com/jvm/... (152 KB at 595.3 KB/sec) [INFO] Installing /tmp/build_0c35a5d2-a067-4abc-a232-14b1fb7a8229/target/... [INFO] Installing /tmp/build_0c35a5d2-a067-4abc-a232-14b1fb7a8229/pom.xml ... [INFO] ------------------------------------------------------------------------ [INFO] **BUILD SUCCESS** [INFO] ------------------------------------------------------------------------ [INFO] Total time: 59.358s [INFO] Finished at: Fri Mar 07 07:28:25 UTC 2014 [INFO] Final Memory: 20M/493M [INFO] ------------------------------------------------------------------------ -----> Discovering process types Procfile declares types -> **web** -----> Compressing... **done**, 70.4MB -----> Launching... **done**, v6 http://agile-sierra-1405.herokuapp.com/ **deployed to Heroku** To [email protected]:agile-sierra-1405.git * [new branch] master -> master
Your application should now be up and running on Heroku.