A complete boot camp for beginners who want to learn Spring Boot.
In this course, you'll learn how we can create web services and cover all the topics of Spring Boot, Spring Framework, and many others.
If you've some experience in Java and want to be a Software Engineer or Java Developer using Spring, you're on right way.
Just read and practice, in the end of this course you'll have a great knowledge of Spring boot, a backend knowledge.
Course outline:
JPA, Hibernate, Spring, Spring Framework, H2 Database, PostgreSQL, MySQL.
#SpringBoot
#SpringFramwork
#MySQL
#PostgreSQL
#MySQL
#H2
#JPA/Hibernate
#Webservices
1. A Complete Spring Boot Course for beginners
https://spring.io/
PAGE 1
Sufyan Sattar
Software Engineer
sufyan.sattar@tkxel.com
2. Course
Outline
Introduction to Spring Boot and Background
Web Services (SOAP and Restful)
JPA/Hibernate and Custom SQL Queries
H2 Database (In memory database)
PostgreSQL and MySQL
PAGE 2
3. Introduction to Spring Boot
It is an application framework used for developing Enterprise Applications.
It makes programming Java quicker, easier, and safer for everybody.
It provides a flexible way to configure Java Beans, XML configurations, and Database Transactions.
It provides powerful batch processing and manages REST endpoints. In Spring Boot, everything is
auto-configured; no manual configurations are needed.
Termimology:
Spring Initializer (https://start.spring.io/)
Starter Projects
Auto Configuration
Actuators
Developer Tools (DevTools)
PAGE 3
4. Setting up Spring Web projects was not easy
Define Maven Dependencies and manage versions for the framework (spring web_mvc, Jackson)
Define web.xml (src/main/webapp/WEB_INF/web.xml)
Define front controller for spring framework (Dispatcher Servlets)
Define a Spring content.xml (src/main/webapp/WEB_INF/todo_servlet.xml)
Define all beans
Define component scan
Install Tomcat or another web server like Glassfish.
Deploy and run the application in Tomcat
PAGE 4
World Before Spring Boot
5. Spring Boot Starter Projects
It helps you get the project up and running quickly.
Web Applications (Spring boot starter web)
Rest API (Spring boot starter web)
Talk to database using JPA (spring boot starter data JPA)
Talk to database using JDBC (spring boot starter JDBC)
Spring Boot Auto Configurations
It provides a basic configuration to run your app using the framework defined in maven dependencies.
We can override our own configuration
Auto configuration is decided based on which framework is in the classpath
E.g. (spring boot starter web)
Dispatch Servlet
Embeded Servlets Container – Tomcat is the default server
Default Error Page
Bean to JSON conversion
PAGE 5
How does Spring Boot do its magic?
6. Monitor and manage your application in your production.
Provides a number of endpoints:-
Beans – Complete the list of Spring beans in your app
Health – Application health information
Metrics – Application metrics
Mapping – Details around Request Mapping
PAGE 6
Spring Boot - Actuators
Increase developer productivity
Save timing
Only local machine or debug variant
Spring Boot - Dev Tools
7. PAGE 7
Spring Framework vs Spring Boot
Spring Framework
The Spring framework provides comprehensive infrastructure support for developing Java applications.
It's packed with some nice features like Dependency Injection, and out-of-the-box modules like:
Spring JDBC
Spring MVC
Spring Security
Spring ORM
Spring Test
Spring Boot
Spring Boot is basically an extension of the Spring framework, which eliminates the boilerplate configurations
required for setting up a Spring application.
Here are just a few of the features in Spring Boot:
Opinionated ‘starter' dependencies to simplify the build and application configuration
Embeded Server to avoid complexity in application deployment
Metrics, Health checks, and external configuration
Automatic config for Spring functionality
8. Web Services
Design for machine-to-machine or application-to-application interaction.
Should be interoperable – Not platform dependent
Should allow communication over a network
Web Service Definition
Request/Response Format Request Structure Response Structure Endpoint
(XML/JSON)
Note
Dispatcher Servlets handle the request/response
Spring boot auto configuration handle/configure dispatcher servlets
Jackson converts the Java Bean to JSON and vice versa
PAGE 8
9. PAGE 9
Web Service Task
Social Media Application Usecase : User ---> Post
Retrieve all users GetRequest /users
Create a user PostRequest /users
Retrieve a specific user GetRequest /users{id}
Delete a user DeleteRequest /users{id}
1. Create a Controller. @RestController
2. Create methods for API and annotate with
1. @GetMapping
2. @PostMapping
3. @PutMapping
4. @DeleteMapping
10. PAGE 10
Web Service Topics
HATEOAS (Hyper Media as the Engine of Application State)
HATEOAS will add value to you API when used by client. The links provided by HATEOAS gives you the possibilities to
different parts (resources) of your API without needing to hardcore those links in your apps client code.
We use WebMvcLinkBuilder and link any method/API of our
controller in the response.
E.g. I request http://localhost:8080/jpa/users/1/posts/1
Exception Handling
Give a proper response to the user when an exception occurs with the status code.
We can use ResponseEntityExceptionHandler to provide centralized exception handling across all @RequestMapping
methods through @ExceptionHandler methods.
11. PAGE 11
Web Service Topics
Validation for Rest API
We can add @Valid to validate our request
@Sized(min=2) @Email @Past
We just place annotation to the variable
Internationalization for Restful Services
We create different resources file w.r.t languages e.g: messages_fr.properties.
In messages.properties file we write string in different language.
Content Negotiation
We can implement XML support in out Restful API.
Client will sent Accept Header with application/xml value.
12. PAGE 12
Web Service Topics
Swagger UI
baseurl/swagger-ui/index.html
OpenAPI create all the documentation of your Restful API in our application
Swagger UI gets that data and represents in GUI
OpenAPI definition: baseurl/v3/api-docs
Monitory API with Spring Boot Actuators
base_url/actuator
We can manual configuration by adding some lines
in application.properties file
HAL Explorer
Visualizing all API
Its show all links in visual format
You can also see HATEOAS links in visual formats
base_url/explorer/
13. PAGE 13
Web Service Topics
Filtering
Static Filtering
Just place @JsonIgnore above the variable
You can also place above class name and add multiple parameter name
Dynamic Filtering
When you hide/show data in response w.r.t to response
We use SimpleBeanPropertyFilter, FilterProvider, and MappingJacksonValue
Versioning
Url versioning
Params versioning
Customer Header versioning
Produces versioning (mine-type versioning)
14. PAGE 14
Web Service Topics
Security
After Enable security web services will return 401 unauthorized status.
Request all API with basic Auth (username=user and password=from console)
Add configuration for static password not change when server restart
security.username=username , security.password=password
15. JPA/Hibernate and Custom Query
JPA is the specification and define the way to manage relational database using Java Objects
Hibernate is the implementation of Java Persistence API. It is the ORM tool to persist Java objects
into relational database
Implementation/Annotations:
@Entity
@Table(name=“employee”)
@Column(name=“first_name”)
EmptyConstructor
All Argument Constructor
Setter/Getter
@OneToMany(mappedBy=“user”, cascade=Cascade.ALL)
@ManyToOne()
@JoinColoum
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Repository (interface UserRepo implement JpaRepository<User, Integer>)
PAGE 15
16. JPA/Hibernate and Custom Query
JPA Repository:
Its interface having default storage methods like save(), findAll(); findBtId(), DeleteById() etc.
Its provides us the ORM for storing data into relational database.
We can also write custom query for fetching data from database.
JPA provided us @Query annotation.
Create interface and implement JpaRepository<Object, Integer>)
Inside repo you can write function and custom query
Custom Query:
@Query(“SELECT * FROM posts WHERE user_id=:user_id AND id=:post_id”, nativeQuery=true)
Post getPostDetailsOfSpecifcUser(
@Param(“user_id”) Integer user_id,
@Param(“post_id”) Integer post_id
);
PAGE 16
17. H2 Database
H2 is inmemory database provided by Spring Boot.
H2 database name randomly generated each time you restart the run or run application.
We can make it constant by manual configuration:
Spring.datasource.url=“jdbc:h2:mem:mytestdb”
Sometime we need more fined grained control over tha database alterations and that why we create
data.sql and schema.sql
data.sql:- We rely on default schema created by Hibernate/JPA. We add data into data.sql by writing SQL
queries into data.sql file
schema.sql:- We don`t rely on default schema creation mechanism. We create own schema i.e table and
coloums etc. Spring will pickup this file and create schema
Note: Script base initialization i.e through data.sql and schema.sql, and hibernate default initialization
together can cause some issues.
We disable hibernate automatic schema creations with manual configuration.
spring.jpa.hibernate.ddl-auto=none
If you want to use both hibernate automatic creation schema and script based schema creation and data
population. You can use
spring.jpa.defer-datasource-initialization=true
Script base initialization is perform by default only for embeded databases.
PAGE 17
18. PostgreSQL and MySQL with Spring Boot
Configuration with PostgreSQL
spring.datasource.url=jdbc:postgresql://localhost:5432/employees
spring.datasource.username=postgres
spring.datasource.password=admin
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
Configuration with MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/employees
spring.datasource.username=root
spring.datasource.password=admin
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
PAGE 18