The approach essentially works on the fact that a Spring Boot web application looks for static content in a very specific location - src/main/resources/static folder from the root of the project, so if I can get the final js content into this folder, then I am golden.
So let us jump into it.
Pre-requisites
There is primarily one pre-requisite - the excellent angular-cli tool which is a blessing for UI ignorant developers like me.The second optional but useful pre-requisite is the Spring-Boot CLI tool described here
Generating a SPA Project
Given these two tools, first create a Spring Boot web project either by starting from http://start.spring.io or using the following CLI command:
spring init --dependencies=web spring-boot-angular2-static-sample
At this point a starter project should have been generated in the spring-boot-angular2-static-sample folder. From that folder generate a Angular 2 project using the angular-cli.
ng init
Change the location where angular-cli builds the artifacts, edit angular-cli.json and modify as follows:
Now build the static content:
ng build
this should get the static content to the src/main/resources/static folder.
And start up the Spring-Boot app:
mvn spring-boot:run
and the AngularJS2 based UI should render cleanly!
Live Reload
One of the advantages of using the Angular-cli is the excellent tool-chain that it comes with - one of them being the ability to make changes and view it reflected on the UI. This ability is lost with the approach documented here where the UI may be primarily driven by services hosted on the Spring-Boot project. To get back the live reload feature on the AngularJS2 development is however a cinch.First proxy the backend, create a proxy.conf.json file with entry which looks like this:
{ "/api": { "target": "http://localhost:8080", "secure": false } }
and start up the Angular-cli server using the command:
ng serve --proxy-config proxy.conf.json
and start up the server part independently using:
mvn spring-boot:run
That is it, now the UI development can be carried out independent of the server side API's!. For an even greater punch just use the excellent devtools that is packaged with Spring Boot to get a live reload(more a restart) feature on the server side also.
Very useful info. Thank you!
ReplyDeleteJust what I needed. Thank you.
ReplyDeleteThanks for sharing !!
ReplyDelete