Using Spring Boot one can quickly create a simple REST server with sophisticated data access (using Spring Data repositories) as well as a well-defined REST API (using Spring Data Rest).

However, getting it going takes a lot of initial effort and there are a few gotchas that need to be taken into account (for example the not-exactly-intuitive behavior of @ComponentScan which caused me to waste a couple of hours chasing shadows).

I have created a “skeleton Spring Boot project” that can be used as a starting point to build a fully-fledged REST-based microservice.

To get going:

git clone git@github.com:massenz/spring-template.git
cd spring-template
rm -rf .git
cd ..
mv spring-template my-project
cd my-project
git init

You can then create a new repo on github and push to that one (just follow the instruction on github.com).  Remember to update in the POM the name of the artifact, the groupId, etc.

The pom.xml also includes the necessary dependencies and configuration to enable automatic test coverage (Cobertura); Travis CI and Coveralls.io are also enabled:

# To create test coverage reports (in target/site/cobertura)
mvn clean cobertura:cobertura test

# To upload to coveralls.io (do NOT push the repo token to github)
mvn cobertura:cobertura coveralls:report -DrepoToken=foobazebarerete

# To run via maven (Tomcat will be listening on the default
# port: localhost:8080)
mvn spring-boot:run

# To run from the command-line (useful on deployment server who
# may not have the JDK/Maven installed):
mvn clean package
java -jar target/my-project-1.0.SNAPSHOT.jar -Dserver.port=9000

This assumes you have a Mongo server listening on localhost:27017, if that’s not the case, you will have to modify accordingly the MongoDB URI in

resources/application.yaml

For an example of how to integrate with Travis and run automated test, see the configuration file:

.travis.yaml

For more information, please consult the Spring Boot extensive reference manual.

This project is released under the Apache 2 License.

Leave a comment

Trending