This repository is no longer maintained. The project has moved here
Microservice version of the Spring Trader app using spring boot
This repository holds a collection of micro services that work together to present a trading application surfaced though a web UI, but more interfaces can be created that re-utilise the microservices.
It was created to support workshops and demonstrations of building and using microservices
architectures and running these in Cloud Foundry (although it is possible to run these on other runtimes).
The workshops follow a series of exercises, or labs, and you can find links to the guides for these exercises below.
The system is composed of 4 microservices. The relationship between the microservices is illustrated below.
This service is a spring boot application responsible for providing up to date company and ticker/quote information. It does this by providing a REST api with 2 calls:
/quotes?q={symbols}
Returns an up to date quote for each symbol in the comma-delimited list./company/{search}
Returns a list of companies that have the search parameter in their names or symbols.This application has no dependencies apart from an external service - markitondemand - to retrieve the real time data.
This service is a spring boot application responsible for creating and managing user accounts.
It stores the accounts in a RDBMS store and uses a spring JPA respository to accomplish this. It provides several REST api calls for other services to consume its services.
This service is a spring boot application responsible for managing portfolios - these are collections of holdings, which in turn are collection of orders on a particular share.
This service accepts orders (both BUY and SELL) and stores these in a RDBMS store - it does not have to be the same RDBMS as the Account service, but it can be! It provides REST api calls for other services to consume its services.
This service is dependent on the Account service above to ensure the logged in user has enough funds to buy stock as well as keeping the account funds up to date. It is also dependent on the Quote service to retrieve up to date quote information and calculate the current value of portfolios.
This service is a spring boot application providing the web interface.
The web interface is built using bootstrap and Thymeleaf and uses a Spring controller to delegate calls to the relevant services:
To deploy the microservices please follow the guides of the workshop below.
Each guide includes instructions on how to deploy and run to:
The following guides describe how to setup the environment and deploy the microservices to Cloud Foundry.
At Pivotal we love education, not just educating ourselves, but also educating others. As such, these guides follow the "teaching you how to fish" principle - Rather than giving you line by line/command by command instructions, we provide guidelines and links to documentation where you can read and learn more.
TODO: document a walk through of this demo. This is a walkthough of the workshop above.
TODO: document a walk through of this demo.
TODO: document a walk through of this demo.
TODO: document a walk through of this demo.
TODO: document a walk through of this demo using Zipkin and Kibana.
TODO: document a walk through of this demo.
TODO: document how to operate/monitor several microservices, using Spring Boot Admin and ELK tile
The roadmap for this project is constantly evolving. Please feel free to reach out with ideas.
Everyone is encouraged to help improved this project.
The master branch has the latest stable release. development happens in the development branch (or feature branches that get merged into development branch). So please check if want you to develop is already in the development branch.
Here are some ways you can contribute:
We use the GitHub issue tracker to track bugs and features. Before submitting a bug report or feature request, check to make sure it hasn't already been submitted. When submitting a bug report, please include any relevant information. Ideally, a bug report should include a pull request with failing specs, and maybe even a fix!