SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introductionJonathan Holloway
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot IntroductionJeevesh Pandey
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action Alex Movila
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootJosué Neis
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOPDzmitry Naskou
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with SpringJoshua Long
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVCDzmitry Naskou
 
Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Hitesh-Java
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - CoreDzmitry Naskou
 
Building a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootBuilding a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootOmri Spector
 

Tendances (20)

Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
 
Spring boot
Spring bootSpring boot
Spring boot
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOP
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVC
 
Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 
Spring Core
Spring CoreSpring Core
Spring Core
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
Spring boot jpa
Spring boot jpaSpring boot jpa
Spring boot jpa
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Building a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootBuilding a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring Boot
 

En vedette

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
 
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
 

En vedette (15)

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 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 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
 

Similaire à Spring boot

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
 

Similaire à Spring boot (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
 
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
 
Gradle
GradleGradle
Gradle
 

Dernier

Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Association for Project Management
 
How to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptxHow to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptxCeline George
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxAreebaZafar22
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxEsquimalt MFRC
 
REMIFENTANIL: An Ultra short acting opioid.pptx
REMIFENTANIL: An Ultra short acting opioid.pptxREMIFENTANIL: An Ultra short acting opioid.pptx
REMIFENTANIL: An Ultra short acting opioid.pptxDr. Ravikiran H M Gowda
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxheathfieldcps1
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxJisc
 
Micro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfMicro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfPoh-Sun Goh
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSCeline George
 
Interdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptxInterdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptxPooja Bhuva
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfUnit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfDr Vijay Vishwakarma
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentationcamerronhm
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and ModificationsMJDuyan
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.pptRamjanShidvankar
 
ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.MaryamAhmad92
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17Celine George
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...pradhanghanshyam7136
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxAmanpreet Kaur
 

Dernier (20)

Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
How to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptxHow to setup Pycharm environment for Odoo 17.pptx
How to setup Pycharm environment for Odoo 17.pptx
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptx
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
 
REMIFENTANIL: An Ultra short acting opioid.pptx
REMIFENTANIL: An Ultra short acting opioid.pptxREMIFENTANIL: An Ultra short acting opioid.pptx
REMIFENTANIL: An Ultra short acting opioid.pptx
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptx
 
Micro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfMicro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdf
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
Interdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptxInterdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptx
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfUnit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and Modifications
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
 

Spring boot

  • 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