Spring 5 training (Spring guru) - personal notes

Revision as of 18:01, 9 March 2018 by WikiFreak (talk | contribs)


I recently (2018) subscribe to an online training related to Spring 5 on Udemy. This page is a sum-up of my personal notes related to Spring 5.


Links

  • Spring initializr - to generate a quick start project based on the libraries you choose


Very simple web-application

  • Go to Spring initializr
  • Select
    • web > web
    • SQL > JPA
    • SQL > H2
    • Templates > Thymeleaf
    • Ops > actuator


H2 hint

When using H2 on a web application, don't forget to enable the console! Edit application.properties as follow:

spring.h2.console.enabled=true
# replace "spring5webapp" by your own application
spring.datasource.url=jdbc:h2:mem:spring5webapp;DB_CLOSE_ON_EXIT=FALSE

Then you can reach the console at http://localhost:8080/h2-console


Hibernate

General notes

Hibernate recommends to implement hashCode() and equals() on all JPA entities. They also recommend to use a particular Business ID when possible, if not then use the ID. Only the key fields should be in these methods.


How to run project

Spring boot provides some out-of-the-box tools.

To run the application:

# Using the maven installation (outside the project)
mvn spring-boot:run

# Using the embedded tool
./mvnw spring-boot:run


IntelliJ configuration

Plugins

Useful plugings:

  • File > Settings > Plugins > Browse repositories
    • .ignore
    • Ideolog
    • Sonarlint
    • Save actions
    • GenerateSerialVersion

Enable toolbars! View > Toolbar


Import optimization

see https://stackoverflow.com/questions/11704327/how-to-optimize-imports-automatically-after-each-save-in-intellij-idea


IntelliJ IDEA offers 2 options:

  • Settings | Editor | General | Auto Import > Optimize imports on the fly
  • Commit Project dialog > Optimize imports option


Spring 5

springMVC

Implementation of MVC concept in Spring:

MVC pattern in Spring (credentials: Spring Guru, UDEMY)

Here is a short description of the schema - as I understood it + based on my experience with Spring so far (v2 to v4):

  1. Client submits a request to the server (HTTP request)
  2. Dispatcher receives the request
  3. Dispatcher asks the Handler WHO should take care of the request? i.e:
    1. What is the Controller for the requested endpoint?
    2. Is there any java Method that match the given HTTP request type (GET, POST, PUT, ..) + arguments?
  4. Dispatcher forwards the query to the Controller
    1. Controller calls a Service to process the query, interact with the database and other systems.
    2. Once the Service processing is complete, it returns corresponding data to the Controller
    3. The Controller will convert the data into a DTO (communication Model) and send it back to the Dispatcher
  5. Dispatcher disposes of the data. i.e:
    1. Send back the data directly to the client [HTTP REST calls]
    2. Forward the data to a View for rending

If we have to render the data:

  1. View generates the page thanks to UI technology (server side) such as JSP, JSF or Themeleaf to generate HTML / Javascript / CSS
  2. View sends the generated content to Dispatcher
  3. Dispatcher forwards the content to the Client