Introduction to Spring Boot!

Post on 15-Jan-2015

1.230 views 6 download

Tags:

description

 

Transcript of Introduction to Spring Boot!

Spring Boot!

Jakub Kubryński / kubrynski.comjk@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@EnableAutoConfigurationpublic 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...

Sample auto-configuration

@Configuration

@ConditionalOnClass({ MBeanExporter.class })

@ConditionalOnMissingBean({ MBeanExporter.class })

@ConditionalOnExpression("${spring.jmx.enabled:true}")

public class JmxAutoConfiguration {

...

}

kubrynski.com @jkubrynskijk@devskiller.com

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

User Interface

• 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

Production ready

• 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.factoriesorg.springframework.context.ApplicationListener=\

org.springframework.boot.actuate.system.ApplicationPidListener

kubrynski.com @jkubrynskijk@devskiller.com

Rapid prototyping

● Spring Boot CLI

● $ spring run app.groovy

● $ spring test tests.groovy

kubrynski.com @jkubrynskijk@devskiller.com

How does it help?

● Dramatically reduces boilerplate code

● Enables polyglot

● Simplifies integration testing

● Simplifies environment maintenance

kubrynski.com @jkubrynskijk@devskiller.com

It's Spring

kubrynski.com @jkubrynskijk@devskiller.com

Live coding

“Talk is cheap – show me the code”

kubrynski.com @jkubrynskijk@devskiller.com

You have questions

I (probably) have answers

kubrynski.com @jkubrynskijk@devskiller.com

END! THANK YOU

kubrynski.com @jkubrynskijk@devskiller.com