SlideShare a Scribd company logo
1 of 27
Download to read offline
Spring 
Boot 
By 
Bhagwat 
Kumar
Agenda 
• What 
and 
Why? 
• Key 
features 
of 
Spring 
boot 
• Prototyping 
using 
CLI. 
• Gradle 
primer 
• Managing 
profiles 
aka 
environment 
in 
grails 
• Using 
Spring 
data 
libraries 
e.g. 
MongoDB 
• Using 
GORM 
• Presentation 
layer 
• Using 
GSP 
2
What 
and 
why? 
• Its 
not 
a 
replacement 
for 
Spring 
framework 
but 
it 
presents 
a 
small 
surface 
area 
for 
users 
to 
approach 
and 
extract 
value 
from 
the 
rest 
of 
Spring. 
• Spring-­‐boot 
provides 
a 
quick 
way 
to 
create 
a 
Spring 
based 
application 
from 
dependency 
management 
to 
convention 
over 
configuration. 
• Grails 
3.0 
will 
be 
based 
on 
Spring 
Boot. 
image 
source 
: 
http://spring.io/blog/2013/08/06/spring-­‐boot-­‐simplifying-­‐spring-­‐for-­‐everyone 
3
Key 
Features 
• Stand-­‐alone 
Spring 
applications 
• No 
code 
generation/ 
No 
XML 
Config 
• Automatic 
configuration 
by 
creating 
sensible 
defaults 
• Starter 
dependencies 
• Structure 
your 
code 
as 
you 
like 
• Supports 
Gradle 
and 
Maven 
• Common 
non-­‐functional 
requirements 
for 
a 
"real" 
application 
– 
embedded 
servers, 
– 
security, 
metrics, 
health 
checks 
– 
externalised 
configuration
Rapid 
Prototyping 
: 
Spring 
CLI 
• Quickest 
way 
to 
get 
a 
spring 
app 
off 
the 
ground 
• Allows 
you 
to 
run 
groovy 
scripts 
without 
much 
boilerplate 
code 
• Not 
recommended 
for 
production 
Install using GVM 
$ gvm install springboot 
Running groovy scripts 
$ spring run app.groovy 
$ spring run --watch app.groovy 
$ spring test tests.groovy
A 
quick 
web 
application 
using 
spring 
boot 
app.groovy 
@Controller 
class 
Example 
{ 
@RequestMapping("/") 
@ResponseBody 
public 
String 
helloWorld() 
{ 
"Hello 
Spring 
boot 
audience!!!" 
} 
} 
$ 
spring 
run 
app.groovy
What 
Just 
happened? 
// 
import 
org.springframework.web.bind.annotation.Controller 
// 
other 
imports 
... 
// 
@Grab("org.springframework.boot:spring-­‐boot-­‐web-­‐starter:0.5.0") 
// 
@EnableAutoConfiguration 
@Controller 
class 
Example 
{ 
@RequestMapping("/") 
@ResponseBody 
public 
String 
hello() 
{ 
return 
"Hello 
World!"; 
} 
// 
public 
static 
void 
main(String[] 
args) 
{ 
// 
SpringApplication.run(Example.class, 
args); 
// 
} 
}
Starter 
POMs 
• One-­‐stop-­‐shop 
for 
all 
the 
Spring 
and 
related 
technology 
• A 
set 
of 
convenient 
dependency 
descriptors 
• Contain 
a 
lot 
of 
the 
dependencies 
that 
you 
need 
to 
get 
a 
project 
up 
and 
running 
quickly 
• All 
starters 
follow 
a 
similar 
naming 
pattern; 
– 
spring-­‐boot-­‐starter-­‐* 
• Examples 
– spring-­‐boot-­‐starter-­‐web 
– spring-­‐boot-­‐starter-­‐data-­‐rest 
– spring-­‐boot-­‐starter-­‐security 
– spring-­‐boot-­‐starter-­‐amqp 
– spring-­‐boot-­‐starter-­‐data-­‐jpa 
– spring-­‐boot-­‐starter-­‐data-­‐elasticsearch 
– spring-­‐boot-­‐starter-­‐data-­‐mongodb 
– spring-­‐boot-­‐starter-­‐actuator
Demo 
: 
Starter 
POMs 
@Grab('spring-­‐boot-­‐starter-­‐security') 
@Grab('spring-­‐boot-­‐starter-­‐actuator') 
@Controller 
class 
Example 
{ 
@RequestMapping("/") 
@ResponseBody 
public 
String 
helloWorld() 
{ 
return 
"Hello 
Audience!!!" 
} 
} 
//security.user.name 
: 
default 
'user' 
//security.user.password 
: 
see 
log 
for 
auto 
generated 
password 
//actuator 
endpoints: 
/beans, 
/health, 
/mappings, 
/metrics 
etc.
Building 
using 
Gradle 
10
Lets 
go 
beyond 
prototyping 
: 
Gradle 
Image 
source 
: 
http://www.drdobbs.com/jvm/why-­‐build-­‐your-­‐java-­‐projects-­‐with-­‐gradle/240168608
build.gradle 
task 
hello 
<< 
{ 
println 
"Hello 
!!!!" 
} 
task 
greet 
<<{ 
println 
"Welocome 
Mr. 
Kumar" 
} 
task 
intro(dependsOn: 
hello) 
<< 
{ 
println 
"I'm 
Gradle" 
} 
hello 
<< 
{ 
println 
"Hello 
extended!!!!" 
} 
greet.dependsOn 
hello, 
intro 
// 
gradle 
tasks 
:list 
all 
the 
available 
tasks 
// 
gradle 
intro 
:executes 
intro 
task 
// 
gradle 
-­‐q 
greet 
:bare 
build 
output 
// 
gradle 
-­‐-­‐daemon 
hello 
:subsequent 
execution 
will 
be 
fast
build.gradle 
: 
using 
plugin 
and 
adding 
dependencies 
apply 
plugin: 
"groovy" 
//look 
for 
sources 
in 
src/main/groovy 
folder 
//inherits 
java 
plugin: 
src/main/java 
folder 
// 
tasks 
compileJava, 
compileGroovy, 
build, 
clean 
sourceCompatibility 
= 
1.6 
repositories 
{ 
mavenCentral() 
} 
dependencies 
{ 
compile 
'org.codehaus.groovy:groovy-­‐all:2.3.6' 
compile 
"org.apache.commons:commons-­‐lang3:3.0.1" 
testCompile 
"junit:unit:4.+" 
}
build.gradle: 
for 
Spring 
boot 
app 
with 
hot 
reloading 
apply 
plugin: 
'groovy' 
apply 
plugin: 
'idea' 
apply 
plugin: 
'spring-­‐boot' 
buildscript 
{ 
repositories 
{ 
mavenCentral()} 
dependencies 
{ 
classpath("org.springframework.boot:spring-­‐boot-­‐gradle-­‐plugin:1.1.8.RELEASE") 
classpath 
'org.springframework:springloaded:1.2.0.RELEASE' 
} 
} 
idea 
{ 
module 
{ 
inheritOutputDirs 
= 
false 
outputDir 
= 
file("$buildDir/classes/main/") 
} 
} 
repositories 
{ 
mavenCentral() 
} 
dependencies 
{ 
compile 
'org.codehaus.groovy:groovy-­‐all' 
compile 
'org.springframework.boot:spring-­‐boot-­‐starter-­‐web' 
}
Environment 
and 
Profile 
aka 
Grails 
config 
• Put 
application.properties/application.yml 
somewhere 
in 
classpath 
• Easy 
one: 
src/main/resources 
folder 
15 
application.yml 
app: 
name: 
Springboot+Config+Yml+Demo 
version: 
1.0.0 
server: 
port: 
8080 
settings: 
counter: 
1 
-­‐-­‐-­‐ 
spring: 
profiles: 
development 
server: 
port: 
9001 
application.properties 
app.name=Springboot+Config+Demo 
app.version=1.0.0 
server.port=8080 
settings.coutner=1 
application-­‐development.properties 
app.name=Springboot+Config+Demo 
app.version=1.0.0 
server.port=8080
Binding 
properties 
16 
Using 
ConfigurationProperties 
annotation 
import 
org.springframework.boot.context.properties.ConfigurationProperties 
import 
org.springframework.stereotype.Component 
@Component 
@ConfigurationProperties(prefix 
= 
"app") 
class 
AppInfo 
{ 
String 
name 
String 
version 
} 
Using 
Value 
annotation 
import 
org.springframework.beans.factory.annotation.Value 
import 
org.springframework.stereotype.Component 
@Component 
class 
AppConfig 
{ 
@Value('${app.name}') 
String 
appName 
@Value('${server.port}') 
Integer 
port 
}
Examples 
17 
OS 
env 
variable 
export 
SPRING_PROFILES_ACTIVE=development 
export 
SERVER_PORT=8090 
gradle 
bootRun 
java 
-­‐jar 
build/libs/demo-­‐1.0.0.jar 
with 
a 
-­‐D 
argument 
(remember 
to 
put 
it 
before 
the 
main 
class 
or 
jar 
archive) 
java 
-­‐jar 
-­‐Dspring.profiles.active=development 
build/libs/dem-­‐1.0.0.jar 
java 
-­‐jar 
-­‐Dserver.port=8090 
build./libs/demo-­‐1.0.0.jar
Using 
Spring 
data 
• Add 
dependency 
compile 
'org.springframework.boot:spring-­‐boot-­‐starter-­‐data-­‐mongodb' 
• Configure 
database 
URL 
spring.data.mongodb.uri=mongodb://localhost/springtestdev 
• Add 
entity 
class 
import 
org.springframework.data.annotation.Id; 
class 
• Add 
Person{@Id 
String 
id, 
String 
name} 
repository 
interface 
import 
org.springframework.data.mongodb.repository.MongoRepository 
public 
interface 
PersonRepository 
extends 
• Autowire 
and 
use 
like 
charm 
MongoRepository<Person, 
String> 
{} 
@Autowired 
PersonRepository 
personRepository 
personRepository.save(new 
Person(name:'Spring 
Boot')) 
personRepository.findAll() 
personRepository.count()
Next 
level 
persistence 
with 
GORM 
• Add 
dependencies 
to 
use 
GORM-­‐Hibernate 
• For 
GORM 
MongoDB 
use 
the 
following 
dependencies 
compile 
'org.grails:gorm-­‐mongodb-­‐spring-­‐boot:1.1.0.RELEASE' 
• Add 
entity 
with 
@grails.persistence.entity 
19 
compile 
'org.springframework.boot:spring-­‐boot-­‐starter-­‐data-­‐jpa' 
compile 
'org.grails:gorm-­‐hibernate4-­‐spring-­‐boot:1.1.0.RELEASE' 
runtime 
'com.h2database:h2' 
//for 
h2 
database 
import 
grails.persistence.Entity 
@Entity 
class 
Person 
{ 
String 
name; 
Integer 
age 
static 
constraints 
= 
{ 
name 
blank: 
false 
age 
min: 
15 
} 
} 
Further 
reading 
https://github.com/grails/grails-­‐data-­‐mapping
Server 
side 
view 
template 
libraries 
• JSP/JSTL 
• Thymeleaf 
• Freemarker 
• Velocity 
• Tiles 
• GSP 
• Groovy 
Template 
Engine 
20
• Very 
limited 
existing 
tags 
available 
• https://github.com/grails/grails-­‐boot/issues/3 
• Add 
dependency 
• Put 
GSP 
templates 
in 
resources/templates 
folder 
GSP 
21 
compile 
"org.grails:grails-­‐gsp-­‐spring-­‐boot:1.0.0.RC1" 
compile 
"org.grails:grails-­‐web:2.4.0.M2"
GSP 
continued... 
• Sample 
request 
handler 
22 
@RequestMapping("/show/{id}") 
public 
ModelAndView 
show(@PathVariable 
Long 
id) 
{ 
Person 
person 
= 
Person.read(id) 
if 
(person) 
{ 
//render(view:"/person/show", 
model:[personInstance:personInstance]) 
new 
ModelAndView("/person/show", 
[personInstance: 
Person.get(id)]) 
} 
else 
{ 
log.info 
"No 
entity 
fount 
for 
id 
: 
" 
+ 
id 
//redirect(controller:"person", 
action:"list") 
new 
ModelAndView("redirect:/person/list") 
} 
}
Grails 
Taglib 
23 
@grails.gsp.TagLib 
@org.springframework.stereotype.Component 
class 
ApplicationTagLib 
{ 
static 
namespace 
= 
"app" 
def 
paginate 
= 
{ 
attrs 
-­‐> 
String 
action 
= 
attrs.action 
Integer 
total 
= 
attrs.total 
Integer 
currentPage 
= 
attrs.currentPage 
?: 
1 
Integer 
pages 
= 
(total 
/ 
10) 
+ 
1 
out 
<< 
render(template: 
"/shared/pagination", 
model: 
[action: 
action, 
total: 
total, 
currentPage: 
currentPage, 
pages: 
pages] 
) 
} 
} 
<app:paginate 
total="${personInstanceCount 
?: 
0}" 
currentPage="${currentPage}" 
action="/person/list"/>
Packaging 
executable 
jar 
and 
war 
files 
24 
Packaging 
as 
jar 
with 
embedded 
tomcat 
$ 
gradle 
build 
$ 
java 
-­‐jar 
build/libs/mymodule-­‐0.0.1-­‐SNAPSHOT.jar 
Packaging 
as 
war 
: 
configure 
build.groovy 
//... 
apply 
plugin: 
'war' 
war 
{ 
baseName 
= 
'myapp' 
version 
= 
'0.5.0' 
} 
//.... 
configurations 
{ 
providedRuntime 
} 
dependencies 
{ 
compile("org.springframework.boot:spring-­‐boot-­‐starter-­‐web") 
providedRuntime("org.springframework.boot:spring-­‐boot-­‐starter-­‐tomcat") 
// 
... 
} 
$ 
gradle 
war
Q/A 
25
Thank 
you. 
26 
Blog: 
http://www.intelligrape.com/blog/author/bhagwat 
LikedIn: 
http://www.linkedin.com/in/bhagwatkumar 
Twitter: 
http://twitter.com/bhagwatkumar 
Mail 
: 
bhagwat@intelligrape.com
References 
Samples 
: 
https://github.com/bhagwat/spring-­‐boot-­‐samples 
http://docs.spring.io/spring-­‐boot/docs/current-­‐SNAPSHOT/reference/htmlsingle 
http://docs.spring.io/spring-­‐boot/docs/current-­‐SNAPSHOT/reference/htmlsingle/#getting-­‐ 
started-­‐gvm-­‐cli-­‐installation 
https://github.com/spring-­‐projects/spring-­‐boot/tree/master/spring-­‐boot-­‐cli/samples 
http://docs.spring.io/spring-­‐boot/docs/current-­‐SNAPSHOT/reference/htmlsingle/#using-­‐boot-­‐ 
starter-­‐poms 
http://spring.io/guides/gs/accessing-­‐mongodb-­‐data-­‐rest/ 
https://spring.io/guides/gs/accessing-­‐data-­‐mongodb/ 
https://spring.io/guides/gs/accessing-­‐data-­‐jpa/ 
http://www.gradle.org/ 
http://www.slideshare.net/Soddino/developing-­‐an-­‐application-­‐with-­‐spring-­‐boot-­‐34661781 
http://presos.dsyer.com/decks/spring-­‐boot-­‐intro.html 
http://pygments.org/ 
for 
nicely 
formatting 
code 
snippets 
included 
in 
presentation 
27

More Related Content

What's hot

Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot IntroductionJeevesh Pandey
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudVMware Tanzu
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOPDzmitry Naskou
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootJosué Neis
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API07.pallav
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework Serhat Can
 
Testing Spring Boot Applications
Testing Spring Boot ApplicationsTesting Spring Boot Applications
Testing Spring Boot ApplicationsVMware Tanzu
 
Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Gunith Devasurendra
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework tola99
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - CoreDzmitry Naskou
 

What's hot (20)

Spring boot
Spring bootSpring boot
Spring boot
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
 
Java Spring
Java SpringJava Spring
Java Spring
 
Spring boot
Spring bootSpring boot
Spring boot
 
Spring Core
Spring CoreSpring Core
Spring Core
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring Cloud
 
Spring boot
Spring bootSpring boot
Spring boot
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOP
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Testing Spring Boot Applications
Testing Spring Boot ApplicationsTesting Spring Boot Applications
Testing Spring Boot Applications
 
Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 

Viewers also liked

That old Spring magic has me in its SpEL
That old Spring magic has me in its SpELThat old Spring magic has me in its SpEL
That old Spring magic has me in its SpELCraig Walls
 
Modular Java - OSGi
Modular Java - OSGiModular Java - OSGi
Modular Java - OSGiCraig Walls
 
Shootout! template engines on the jvm
Shootout! template engines on the jvmShootout! template engines on the jvm
Shootout! template engines on the jvmNLJUG
 
Java Configuration Deep Dive with Spring
Java Configuration Deep Dive with SpringJava Configuration Deep Dive with Spring
Java Configuration Deep Dive with SpringJoshua Long
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action Alex Movila
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVCIndicThreads
 
Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Sam Brannen
 
Spring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSpring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSam Brannen
 
Microservices with Spring Boot
Microservices with Spring BootMicroservices with Spring Boot
Microservices with Spring BootJoshua Long
 
RESTful Web Services with Spring MVC
RESTful Web Services with Spring MVCRESTful Web Services with Spring MVC
RESTful Web Services with Spring MVCdigitalsonic
 
Shootout! Template engines for the JVM
Shootout! Template engines for the JVMShootout! Template engines for the JVM
Shootout! Template engines for the JVMJeroen Reijn
 

Viewers also liked (17)

That old Spring magic has me in its SpEL
That old Spring magic has me in its SpELThat old Spring magic has me in its SpEL
That old Spring magic has me in its SpEL
 
Modular Java - OSGi
Modular Java - OSGiModular Java - OSGi
Modular Java - OSGi
 
Shootout! template engines on the jvm
Shootout! template engines on the jvmShootout! template engines on the jvm
Shootout! template engines on the jvm
 
Java Configuration Deep Dive with Spring
Java Configuration Deep Dive with SpringJava Configuration Deep Dive with Spring
Java Configuration Deep Dive with Spring
 
Boot It Up
Boot It UpBoot It Up
Boot It Up
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
 
Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1
 
Spring Mvc Rest
Spring Mvc RestSpring Mvc Rest
Spring Mvc Rest
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
Spring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSpring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. REST
 
Microservices with Spring Boot
Microservices with Spring BootMicroservices with Spring Boot
Microservices with Spring Boot
 
RESTful Web Services with Spring MVC
RESTful Web Services with Spring MVCRESTful Web Services with Spring MVC
RESTful Web Services with Spring MVC
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Shootout! Template engines for the JVM
Shootout! Template engines for the JVMShootout! Template engines for the JVM
Shootout! Template engines for the JVM
 

Similar to Spring Boot Fundamentals by Bhagwat Kumar

Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overviewKevin He
 
Grunt & Front-end Workflow
Grunt & Front-end WorkflowGrunt & Front-end Workflow
Grunt & Front-end WorkflowPagepro
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshotssimonscholz
 
Building a Spring Boot Application - Ask the Audience!
Building a Spring Boot Application - Ask the Audience!Building a Spring Boot Application - Ask the Audience!
Building a Spring Boot Application - Ask the Audience!🎤 Hanno Embregts 🎸
 
JVM Web Frameworks Exploration
JVM Web Frameworks ExplorationJVM Web Frameworks Exploration
JVM Web Frameworks ExplorationKevin H.A. Tan
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolvedBhagwat Kumar
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Jared Burrows
 
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)🎤 Hanno Embregts 🎸
 
Spring boot 3g
Spring boot 3gSpring boot 3g
Spring boot 3gvasya10
 
Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Vasil Remeniuk
 
Improving build solutions dependency management with webpack
Improving build solutions  dependency management with webpackImproving build solutions  dependency management with webpack
Improving build solutions dependency management with webpackNodeXperts
 
Building a Spring Boot Application - Ask the Audience! (from JVMCon 2018)
Building a Spring Boot Application - Ask the Audience! (from JVMCon 2018)Building a Spring Boot Application - Ask the Audience! (from JVMCon 2018)
Building a Spring Boot Application - Ask the Audience! (from JVMCon 2018)🎤 Hanno Embregts 🎸
 
Pre-render Blazor WebAssembly on static web hosting at publishing time
Pre-render Blazor WebAssembly on static web hosting at publishing timePre-render Blazor WebAssembly on static web hosting at publishing time
Pre-render Blazor WebAssembly on static web hosting at publishing timeJun-ichi Sakamoto
 
Eclipse Buildship JUG Hamburg
Eclipse Buildship JUG HamburgEclipse Buildship JUG Hamburg
Eclipse Buildship JUG Hamburgsimonscholz
 

Similar to Spring Boot Fundamentals by Bhagwat Kumar (20)

Grails Spring Boot
Grails Spring BootGrails Spring Boot
Grails Spring Boot
 
Spring boot wednesday
Spring boot wednesdaySpring boot wednesday
Spring boot wednesday
 
Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overview
 
Gradle - Build System
Gradle - Build SystemGradle - Build System
Gradle - Build System
 
Grunt & Front-end Workflow
Grunt & Front-end WorkflowGrunt & Front-end Workflow
Grunt & Front-end Workflow
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
 
Building a Spring Boot Application - Ask the Audience!
Building a Spring Boot Application - Ask the Audience!Building a Spring Boot Application - Ask the Audience!
Building a Spring Boot Application - Ask the Audience!
 
JVM Web Frameworks Exploration
JVM Web Frameworks ExplorationJVM Web Frameworks Exploration
JVM Web Frameworks Exploration
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolved
 
Spring boot jpa
Spring boot jpaSpring boot jpa
Spring boot jpa
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)
 
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)Building a Spring Boot Application - Ask the Audience!  (from JavaLand 2017)
Building a Spring Boot Application - Ask the Audience! (from JavaLand 2017)
 
Spring boot 3g
Spring boot 3gSpring boot 3g
Spring boot 3g
 
Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1
 
Improving build solutions dependency management with webpack
Improving build solutions  dependency management with webpackImproving build solutions  dependency management with webpack
Improving build solutions dependency management with webpack
 
Building a Spring Boot Application - Ask the Audience! (from JVMCon 2018)
Building a Spring Boot Application - Ask the Audience! (from JVMCon 2018)Building a Spring Boot Application - Ask the Audience! (from JVMCon 2018)
Building a Spring Boot Application - Ask the Audience! (from JVMCon 2018)
 
Pre-render Blazor WebAssembly on static web hosting at publishing time
Pre-render Blazor WebAssembly on static web hosting at publishing timePre-render Blazor WebAssembly on static web hosting at publishing time
Pre-render Blazor WebAssembly on static web hosting at publishing time
 
OpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with GradleOpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with Gradle
 
Eclipse Buildship JUG Hamburg
Eclipse Buildship JUG HamburgEclipse Buildship JUG Hamburg
Eclipse Buildship JUG Hamburg
 
Grails
GrailsGrails
Grails
 

Recently uploaded

ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Projectjordimapav
 
Congestive Cardiac Failure..presentation
Congestive Cardiac Failure..presentationCongestive Cardiac Failure..presentation
Congestive Cardiac Failure..presentationdeepaannamalai16
 
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...Nguyen Thanh Tu Collection
 
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQ-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQuiz Club NITW
 
4.11.24 Poverty and Inequality in America.pptx
4.11.24 Poverty and Inequality in America.pptx4.11.24 Poverty and Inequality in America.pptx
4.11.24 Poverty and Inequality in America.pptxmary850239
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfPatidar M
 
Multi Domain Alias In the Odoo 17 ERP Module
Multi Domain Alias In the Odoo 17 ERP ModuleMulti Domain Alias In the Odoo 17 ERP Module
Multi Domain Alias In the Odoo 17 ERP ModuleCeline George
 
How to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseHow to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseCeline George
 
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...DhatriParmar
 
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxQ4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxlancelewisportillo
 
Using Grammatical Signals Suitable to Patterns of Idea Development
Using Grammatical Signals Suitable to Patterns of Idea DevelopmentUsing Grammatical Signals Suitable to Patterns of Idea Development
Using Grammatical Signals Suitable to Patterns of Idea Developmentchesterberbo7
 
Daily Lesson Plan in Mathematics Quarter 4
Daily Lesson Plan in Mathematics Quarter 4Daily Lesson Plan in Mathematics Quarter 4
Daily Lesson Plan in Mathematics Quarter 4JOYLYNSAMANIEGO
 
Oppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmOppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmStan Meyer
 
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Association for Project Management
 
Narcotic and Non Narcotic Analgesic..pdf
Narcotic and Non Narcotic Analgesic..pdfNarcotic and Non Narcotic Analgesic..pdf
Narcotic and Non Narcotic Analgesic..pdfPrerana Jadhav
 
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfGrade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfJemuel Francisco
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Seán Kennedy
 
Grade Three -ELLNA-REVIEWER-ENGLISH.pptx
Grade Three -ELLNA-REVIEWER-ENGLISH.pptxGrade Three -ELLNA-REVIEWER-ENGLISH.pptx
Grade Three -ELLNA-REVIEWER-ENGLISH.pptxkarenfajardo43
 
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxDIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxMichelleTuguinay1
 

Recently uploaded (20)

ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Project
 
Congestive Cardiac Failure..presentation
Congestive Cardiac Failure..presentationCongestive Cardiac Failure..presentation
Congestive Cardiac Failure..presentation
 
Mattingly "AI & Prompt Design: Large Language Models"
Mattingly "AI & Prompt Design: Large Language Models"Mattingly "AI & Prompt Design: Large Language Models"
Mattingly "AI & Prompt Design: Large Language Models"
 
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
 
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQ-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
 
4.11.24 Poverty and Inequality in America.pptx
4.11.24 Poverty and Inequality in America.pptx4.11.24 Poverty and Inequality in America.pptx
4.11.24 Poverty and Inequality in America.pptx
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdf
 
Multi Domain Alias In the Odoo 17 ERP Module
Multi Domain Alias In the Odoo 17 ERP ModuleMulti Domain Alias In the Odoo 17 ERP Module
Multi Domain Alias In the Odoo 17 ERP Module
 
How to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseHow to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 Database
 
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
Beauty Amidst the Bytes_ Unearthing Unexpected Advantages of the Digital Wast...
 
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxQ4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
 
Using Grammatical Signals Suitable to Patterns of Idea Development
Using Grammatical Signals Suitable to Patterns of Idea DevelopmentUsing Grammatical Signals Suitable to Patterns of Idea Development
Using Grammatical Signals Suitable to Patterns of Idea Development
 
Daily Lesson Plan in Mathematics Quarter 4
Daily Lesson Plan in Mathematics Quarter 4Daily Lesson Plan in Mathematics Quarter 4
Daily Lesson Plan in Mathematics Quarter 4
 
Oppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and FilmOppenheimer Film Discussion for Philosophy and Film
Oppenheimer Film Discussion for Philosophy and Film
 
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
 
Narcotic and Non Narcotic Analgesic..pdf
Narcotic and Non Narcotic Analgesic..pdfNarcotic and Non Narcotic Analgesic..pdf
Narcotic and Non Narcotic Analgesic..pdf
 
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfGrade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...
 
Grade Three -ELLNA-REVIEWER-ENGLISH.pptx
Grade Three -ELLNA-REVIEWER-ENGLISH.pptxGrade Three -ELLNA-REVIEWER-ENGLISH.pptx
Grade Three -ELLNA-REVIEWER-ENGLISH.pptx
 
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxDIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
 

Spring Boot Fundamentals by Bhagwat Kumar

  • 1. Spring Boot By Bhagwat Kumar
  • 2. Agenda • What and Why? • Key features of Spring boot • Prototyping using CLI. • Gradle primer • Managing profiles aka environment in grails • Using Spring data libraries e.g. MongoDB • Using GORM • Presentation layer • Using GSP 2
  • 3. What and why? • Its not a replacement for Spring framework but it presents a small surface area for users to approach and extract value from the rest of Spring. • Spring-­‐boot provides a quick way to create a Spring based application from dependency management to convention over configuration. • Grails 3.0 will be based on Spring Boot. image source : http://spring.io/blog/2013/08/06/spring-­‐boot-­‐simplifying-­‐spring-­‐for-­‐everyone 3
  • 4. Key Features • Stand-­‐alone Spring applications • No code generation/ No XML Config • Automatic configuration by creating sensible defaults • Starter dependencies • Structure your code as you like • Supports Gradle and Maven • Common non-­‐functional requirements for a "real" application – embedded servers, – security, metrics, health checks – externalised configuration
  • 5. Rapid Prototyping : Spring CLI • Quickest way to get a spring app off the ground • Allows you to run groovy scripts without much boilerplate code • Not recommended for production Install using GVM $ gvm install springboot Running groovy scripts $ spring run app.groovy $ spring run --watch app.groovy $ spring test tests.groovy
  • 6. A quick web application using spring boot app.groovy @Controller class Example { @RequestMapping("/") @ResponseBody public String helloWorld() { "Hello Spring boot audience!!!" } } $ spring run app.groovy
  • 7. What Just happened? // import org.springframework.web.bind.annotation.Controller // other imports ... // @Grab("org.springframework.boot:spring-­‐boot-­‐web-­‐starter:0.5.0") // @EnableAutoConfiguration @Controller class Example { @RequestMapping("/") @ResponseBody public String hello() { return "Hello World!"; } // public static void main(String[] args) { // SpringApplication.run(Example.class, args); // } }
  • 8. Starter POMs • One-­‐stop-­‐shop for all the Spring and related technology • A set of convenient dependency descriptors • Contain a lot of the dependencies that you need to get a project up and running quickly • All starters follow a similar naming pattern; – spring-­‐boot-­‐starter-­‐* • Examples – spring-­‐boot-­‐starter-­‐web – spring-­‐boot-­‐starter-­‐data-­‐rest – spring-­‐boot-­‐starter-­‐security – spring-­‐boot-­‐starter-­‐amqp – spring-­‐boot-­‐starter-­‐data-­‐jpa – spring-­‐boot-­‐starter-­‐data-­‐elasticsearch – spring-­‐boot-­‐starter-­‐data-­‐mongodb – spring-­‐boot-­‐starter-­‐actuator
  • 9. Demo : Starter POMs @Grab('spring-­‐boot-­‐starter-­‐security') @Grab('spring-­‐boot-­‐starter-­‐actuator') @Controller class Example { @RequestMapping("/") @ResponseBody public String helloWorld() { return "Hello Audience!!!" } } //security.user.name : default 'user' //security.user.password : see log for auto generated password //actuator endpoints: /beans, /health, /mappings, /metrics etc.
  • 11. Lets go beyond prototyping : Gradle Image source : http://www.drdobbs.com/jvm/why-­‐build-­‐your-­‐java-­‐projects-­‐with-­‐gradle/240168608
  • 12. build.gradle task hello << { println "Hello !!!!" } task greet <<{ println "Welocome Mr. Kumar" } task intro(dependsOn: hello) << { println "I'm Gradle" } hello << { println "Hello extended!!!!" } greet.dependsOn hello, intro // gradle tasks :list all the available tasks // gradle intro :executes intro task // gradle -­‐q greet :bare build output // gradle -­‐-­‐daemon hello :subsequent execution will be fast
  • 13. build.gradle : using plugin and adding dependencies apply plugin: "groovy" //look for sources in src/main/groovy folder //inherits java plugin: src/main/java folder // tasks compileJava, compileGroovy, build, clean sourceCompatibility = 1.6 repositories { mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy-­‐all:2.3.6' compile "org.apache.commons:commons-­‐lang3:3.0.1" testCompile "junit:unit:4.+" }
  • 14. build.gradle: for Spring boot app with hot reloading apply plugin: 'groovy' apply plugin: 'idea' apply plugin: 'spring-­‐boot' buildscript { repositories { mavenCentral()} dependencies { classpath("org.springframework.boot:spring-­‐boot-­‐gradle-­‐plugin:1.1.8.RELEASE") classpath 'org.springframework:springloaded:1.2.0.RELEASE' } } idea { module { inheritOutputDirs = false outputDir = file("$buildDir/classes/main/") } } repositories { mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy-­‐all' compile 'org.springframework.boot:spring-­‐boot-­‐starter-­‐web' }
  • 15. Environment and Profile aka Grails config • Put application.properties/application.yml somewhere in classpath • Easy one: src/main/resources folder 15 application.yml app: name: Springboot+Config+Yml+Demo version: 1.0.0 server: port: 8080 settings: counter: 1 -­‐-­‐-­‐ spring: profiles: development server: port: 9001 application.properties app.name=Springboot+Config+Demo app.version=1.0.0 server.port=8080 settings.coutner=1 application-­‐development.properties app.name=Springboot+Config+Demo app.version=1.0.0 server.port=8080
  • 16. Binding properties 16 Using ConfigurationProperties annotation import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.stereotype.Component @Component @ConfigurationProperties(prefix = "app") class AppInfo { String name String version } Using Value annotation import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Component @Component class AppConfig { @Value('${app.name}') String appName @Value('${server.port}') Integer port }
  • 17. Examples 17 OS env variable export SPRING_PROFILES_ACTIVE=development export SERVER_PORT=8090 gradle bootRun java -­‐jar build/libs/demo-­‐1.0.0.jar with a -­‐D argument (remember to put it before the main class or jar archive) java -­‐jar -­‐Dspring.profiles.active=development build/libs/dem-­‐1.0.0.jar java -­‐jar -­‐Dserver.port=8090 build./libs/demo-­‐1.0.0.jar
  • 18. Using Spring data • Add dependency compile 'org.springframework.boot:spring-­‐boot-­‐starter-­‐data-­‐mongodb' • Configure database URL spring.data.mongodb.uri=mongodb://localhost/springtestdev • Add entity class import org.springframework.data.annotation.Id; class • Add Person{@Id String id, String name} repository interface import org.springframework.data.mongodb.repository.MongoRepository public interface PersonRepository extends • Autowire and use like charm MongoRepository<Person, String> {} @Autowired PersonRepository personRepository personRepository.save(new Person(name:'Spring Boot')) personRepository.findAll() personRepository.count()
  • 19. Next level persistence with GORM • Add dependencies to use GORM-­‐Hibernate • For GORM MongoDB use the following dependencies compile 'org.grails:gorm-­‐mongodb-­‐spring-­‐boot:1.1.0.RELEASE' • Add entity with @grails.persistence.entity 19 compile 'org.springframework.boot:spring-­‐boot-­‐starter-­‐data-­‐jpa' compile 'org.grails:gorm-­‐hibernate4-­‐spring-­‐boot:1.1.0.RELEASE' runtime 'com.h2database:h2' //for h2 database import grails.persistence.Entity @Entity class Person { String name; Integer age static constraints = { name blank: false age min: 15 } } Further reading https://github.com/grails/grails-­‐data-­‐mapping
  • 20. Server side view template libraries • JSP/JSTL • Thymeleaf • Freemarker • Velocity • Tiles • GSP • Groovy Template Engine 20
  • 21. • Very limited existing tags available • https://github.com/grails/grails-­‐boot/issues/3 • Add dependency • Put GSP templates in resources/templates folder GSP 21 compile "org.grails:grails-­‐gsp-­‐spring-­‐boot:1.0.0.RC1" compile "org.grails:grails-­‐web:2.4.0.M2"
  • 22. GSP continued... • Sample request handler 22 @RequestMapping("/show/{id}") public ModelAndView show(@PathVariable Long id) { Person person = Person.read(id) if (person) { //render(view:"/person/show", model:[personInstance:personInstance]) new ModelAndView("/person/show", [personInstance: Person.get(id)]) } else { log.info "No entity fount for id : " + id //redirect(controller:"person", action:"list") new ModelAndView("redirect:/person/list") } }
  • 23. Grails Taglib 23 @grails.gsp.TagLib @org.springframework.stereotype.Component class ApplicationTagLib { static namespace = "app" def paginate = { attrs -­‐> String action = attrs.action Integer total = attrs.total Integer currentPage = attrs.currentPage ?: 1 Integer pages = (total / 10) + 1 out << render(template: "/shared/pagination", model: [action: action, total: total, currentPage: currentPage, pages: pages] ) } } <app:paginate total="${personInstanceCount ?: 0}" currentPage="${currentPage}" action="/person/list"/>
  • 24. Packaging executable jar and war files 24 Packaging as jar with embedded tomcat $ gradle build $ java -­‐jar build/libs/mymodule-­‐0.0.1-­‐SNAPSHOT.jar Packaging as war : configure build.groovy //... apply plugin: 'war' war { baseName = 'myapp' version = '0.5.0' } //.... configurations { providedRuntime } dependencies { compile("org.springframework.boot:spring-­‐boot-­‐starter-­‐web") providedRuntime("org.springframework.boot:spring-­‐boot-­‐starter-­‐tomcat") // ... } $ gradle war
  • 26. Thank you. 26 Blog: http://www.intelligrape.com/blog/author/bhagwat LikedIn: http://www.linkedin.com/in/bhagwatkumar Twitter: http://twitter.com/bhagwatkumar Mail : bhagwat@intelligrape.com
  • 27. References Samples : https://github.com/bhagwat/spring-­‐boot-­‐samples http://docs.spring.io/spring-­‐boot/docs/current-­‐SNAPSHOT/reference/htmlsingle http://docs.spring.io/spring-­‐boot/docs/current-­‐SNAPSHOT/reference/htmlsingle/#getting-­‐ started-­‐gvm-­‐cli-­‐installation https://github.com/spring-­‐projects/spring-­‐boot/tree/master/spring-­‐boot-­‐cli/samples http://docs.spring.io/spring-­‐boot/docs/current-­‐SNAPSHOT/reference/htmlsingle/#using-­‐boot-­‐ starter-­‐poms http://spring.io/guides/gs/accessing-­‐mongodb-­‐data-­‐rest/ https://spring.io/guides/gs/accessing-­‐data-­‐mongodb/ https://spring.io/guides/gs/accessing-­‐data-­‐jpa/ http://www.gradle.org/ http://www.slideshare.net/Soddino/developing-­‐an-­‐application-­‐with-­‐spring-­‐boot-­‐34661781 http://presos.dsyer.com/decks/spring-­‐boot-­‐intro.html http://pygments.org/ for nicely formatting code snippets included in presentation 27