KEMBAR78
Introduction to Spring Boot! | PDF
SpringBoot!
JakubKubryński/kubrynski.com
jk@devskiller.com
@jkubrynski
whoami
kubrynski.com @jkubrynskijk@devskiller.com
History
• 1999 J2EE 1.2
• 2001 xDoclet 1.0
• 2004 Spring Framework 1.0
●
Injection
●
POJO oriented
●
AOP & transactions
• 2006 Java EE 5
• 2013 Spring Boot!
kubrynski.com @jkubrynskijk@devskiller.com
Focus
source: spring.io
kubrynski.com @jkubrynskijk@devskiller.com
Revolution
@RestController
@EnableAutoConfiguration
public class HelloWorld {
@RequestMapping("/")
public String helloWorld() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(HelloWorld.class, args);
}
}
kubrynski.com @jkubrynskijk@devskiller.com
Key features
• Stand-alone Spring applications
• No code generation / no XML config
• Automatic configuration
• Starter dependencies
• Embedded Tomcat or Jetty
• Production-ready environment
kubrynski.com @jkubrynskijk@devskiller.com
Blocks
• SpringApplication
• @EnableAutoConfiguration
• @ConditionalOnClass
• @ConditionalOnBean
• @ConditionalOnExpression
kubrynski.com @jkubrynskijk@devskiller.com
@...OnMissing...
Sampleauto-configuration
@Configuration
@ConditionalOnClass({ MBeanExporter.class })
@ConditionalOnMissingBean({ MBeanExporter.class })
@ConditionalOnExpression("${spring.jmx.enabled:true}")
public class JmxAutoConfiguration {
...
}
kubrynski.com @jkubrynskijk@devskiller.com
Availableauto-configurations
●
Batch
●
Spring Data, JPA, Hibernate, Mongo, Redis
●
JMS, RabbitMQ (AMQP)
●
Reactor
●
Security
●
WebMVC, Thymeleaf, Websocket
●
Tomcat and Jetty
kubrynski.com @jkubrynskijk@devskiller.com
Starters
• spring-boot-starter
• spring-boot-starter-web
• spring-boot-starter-test
• spring-boot-starter-actuator
kubrynski.com @jkubrynskijk@devskiller.com
Starters
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
kubrynski.com @jkubrynskijk@devskiller.com
Properties
public class MailProperties {
@Value(“serverAddress”)
private InetAddress serverAddress;
}
java – jar app.jar –serverAddress=10.0.0.1
kubrynski.com @jkubrynskijk@devskiller.com
Properties
@ConfigurationProperties(prefix=”mail”)
public class MailProperties {
private InetAddress serverAddress;
private Resource template;
}
mail.serverAddress : 84.123.456.32
mail.template : classpath:mail.vm
kubrynski.com @jkubrynskijk@devskiller.com
Properties
@ConfigurationProperties(prefix=”mail”)
public class MailProperties {
private InetAddress serverAddress;
private Resource template;
}
mail:
serverAddress : 84.123.456.32
template : classpath:mail.vm
kubrynski.com @jkubrynskijk@devskiller.com
Tests
@SpringApplicationConfiguration(classes =
Application.class)
@ContextConfiguration(classes = Application,
loader = SpringApplicationContextLoader)
@IntegrationTest
kubrynski.com @jkubrynskijk@devskiller.com
Profiles
• default file is application.properties
• customize by spring.config.name
• spring.profiles.active = production,mysql
• configuration per profile:
●
application-production.properties
●
conference-test.properties
kubrynski.com @jkubrynskijk@devskiller.com
Logging
• Log4J
• Logback
• Java Util Logging
kubrynski.com @jkubrynskijk@devskiller.com
Security
• spring-boot-starter-security
• @SecurityAutoConfiguration
• SecurityProperties
●
security.requireSsl = true
●
security.enableCsrf = true
kubrynski.com @jkubrynskijk@devskiller.com
UserInterface
• Thymeleaf
• Template engine for XML/XHTML/HTML5
• Customizable
●
spring.thymeleaf.prefix=classpath:/templates/
●
spring.thymeleaf.suffix=.html
●
spring.thymeleaf.mode=HTML5
●
spring.thymeleaf.encoding=UTF-8
kubrynski.com @jkubrynskijk@devskiller.com
Productionready
• Monitoring endpoints
●
/health
●
/info
●
/metrics
●
/trace
• JMX / SSH
• Auditing
kubrynski.com @jkubrynskijk@devskiller.com
WAR
@EnableAutoConfiguration
public class WebApp extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder
configure(SpringApplicationBuilder application) {
return application.sources(SampleApplication.class);
}
}
kubrynski.com @jkubrynskijk@devskiller.com
Monitoring application
●
ApplicationPidListener
●
SpringApplication.addListeners(...)
●
META-INF/spring.factories
org.springframework.context.ApplicationListener=
org.springframework.boot.actuate.system.ApplicationPidListener
kubrynski.com @jkubrynskijk@devskiller.com
Rapidprototyping
●
Spring Boot CLI
●
$ spring run app.groovy
●
$ spring test tests.groovy
kubrynski.com @jkubrynskijk@devskiller.com
Howdoesithelp?
●
Dramatically reduces boilerplate code
●
Enables polyglot
●
Simplifies integration testing
●
Simplifies environment maintenance
kubrynski.com @jkubrynskijk@devskiller.com
It'sSpring
kubrynski.com @jkubrynskijk@devskiller.com
Livecoding
“Talkischeap –showmethecode”
kubrynski.com @jkubrynskijk@devskiller.com
Youhavequestions
I(probably)haveanswers
kubrynski.com @jkubrynskijk@devskiller.com
END! THANKYOU
kubrynski.com @jkubrynskijk@devskiller.com

Introduction to Spring Boot!