webservice-springboot2-java11
My web services project with Spring Boot and JPA / Hibernate
Create Spring Boot Java project
Implement domain model
Structure logical layers: resource, service, repository
Configure test database (H2)
Populate the database
CRUD - Create, Retrieve, Update, Delete
Exception handling
Maven
Java 11
Packing JAR
Dependencies: Spring Web Starter
H2 database, test profile, JPA
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-data-jpa</artifactId >
</dependency >
<dependency >
<groupId >com.h2database</groupId >
<artifactId >h2</artifactId >
<scope >runtime</scope >
</dependency >
spring.profiles.active=test
spring.jpa.open-in-view=true
application-test.properties:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
JPA repository, dependency injection, database seeding
Service layer, component registration
"To many" association, lazy loading, JsonIgnore
Order o1 = new Order (null , Instant .parse ("2019-06-20T19:53:07Z" ), u1 );
Order o2 = new Order (null , Instant .parse ("2019-07-21T03:42:10Z" ), u2 );
Order o3 = new Order (null , Instant .parse ("2019-07-22T15:21:22Z" ), u1 );
Product p1 = new Product (null , "The Lord of the Rings" , "Lorem ipsum dolor sit amet, consectetur." , 90.5 , "" );
Product p2 = new Product (null , "Smart TV" , "Nulla eu imperdiet purus. Maecenas ante." , 2190.0 , "" );
Product p3 = new Product (null , "Macbook Pro" , "Nam eleifend maximus tortor, at mollis." , 1250.0 , "" );
Product p4 = new Product (null , "PC Gamer" , "Donec aliquet odio ac rhoncus cursus." , 1200.0 , "" );
Product p5 = new Product (null , "Rails for Dummies" , "Cras fringilla convallis sem vel faucibus." , 100.99 , "" );
Many-to-many association with JoinTable
OrderItem, many-to-many association with extra attributes
OrderItem oi1 = new OrderItem (o1 , p1 , 2 , p1 .getPrice ());
OrderItem oi2 = new OrderItem (o1 , p3 , 1 , p3 .getPrice ());
OrderItem oi3 = new OrderItem (o2 , p3 , 2 , p3 .getPrice ());
OrderItem oi4 = new OrderItem (o3 , p5 , 2 , p5 .getPrice ());
Product-OrderItem one-to-many association
Payment, one-to-one association
{
" name" : " Bob Brown" ,
" email" : " [email protected] " ,
" phone" : " 977557755" ,
" password" : " 123456"
}
Exception handling - findById
Exception handling - delete
EmptyResultDataAccessException
DataIntegrityViolationException
Exception handling - update
EntityNotFoundException
Create Heroku app & provision PostgreSQL
App dashboard -> Resources
Search "postgres" -> select "Heroku Postgres"
Super user: postgres
Password: 1234567
Port: 5432
Start pgAdmin
Databases -> Create -> Database
<dependency >
<groupId >org.postgresql</groupId >
<artifactId >postgresql</artifactId >
<scope >runtime</scope >
</dependency >
spring.datasource.url=jdbc:postgresql://localhost:5432/springboot
spring.datasource.username=postgres
spring.datasource.password=1234567
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
jwt.secret=MYJWTSECRET
jwt.expiration=3600000
Get SQL script from local PostgreSQL
Select database
Tools -> Backup
postgres://wavglvupbdad:358f443aafe452eca4c58fbc15d02e50b08130c7aaea3aff6c4f59c
[email protected] :5432/d7u9ub86cdsu
user: wavglvupbdad
password: 358f443aafe452eca4c58fbc15d02e50b08130c7aaea3aff6c4f59c13f9abb
server: ec2-23-21-106-266.compute-1.amazonaws.com
port: 5432
database: d7u9ub86cdsu
Advanced -> DB rescriction: (database)
Load and run SQL Script
heroku git :remote - a myapp
git remote - v
DATABASE_URL
JWT_EXPIRATION
JWT_SECRET
spring.datasource.url=${DATABASE_URL}
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.format_sql=false
jwt.secret=${JWT_SECRET}
jwt.expiration=${JWT_EXPIRATION}
Update application.properties: spring.profiles.active=prod
java.runtime.version=11
git add .
git commit -m "Deploy app to Heroku"
git push heroku master