Upload
jakub-kubrynski
View
1.229
Download
6
Tags:
Embed Size (px)
DESCRIPTION
Citation preview
whoami
kubrynski.com @[email protected]
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 @[email protected]
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 @[email protected]
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 @[email protected]
Blocks
• SpringApplication
• @EnableAutoConfiguration
• @ConditionalOnClass
• @ConditionalOnBean
• @ConditionalOnExpression
kubrynski.com @[email protected]
@...OnMissing...
Sample auto-configuration
@Configuration
@ConditionalOnClass({ MBeanExporter.class })
@ConditionalOnMissingBean({ MBeanExporter.class })
@ConditionalOnExpression("${spring.jmx.enabled:true}")
public class JmxAutoConfiguration {
...
}
kubrynski.com @[email protected]
Available auto-configurations
● Batch● Spring Data, JPA, Hibernate, Mongo, Redis● JMS, RabbitMQ (AMQP)● Reactor● Security● WebMVC, Thymeleaf, Websocket● Tomcat and Jetty
kubrynski.com @[email protected]
Starters
• spring-boot-starter
• spring-boot-starter-web
• spring-boot-starter-test
• spring-boot-starter-actuator
kubrynski.com @[email protected]
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 @[email protected]
Properties
public class MailProperties {
@Value(“serverAddress”)
private InetAddress serverAddress;
}
java – jar app.jar –serverAddress=10.0.0.1
kubrynski.com @[email protected]
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 @[email protected]
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 @[email protected]
Tests
@SpringApplicationConfiguration(classes =
Application.class)
@ContextConfiguration(classes = Application,
loader = SpringApplicationContextLoader)
@IntegrationTest
kubrynski.com @[email protected]
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 @[email protected]
Security
• spring-boot-starter-security
• @SecurityAutoConfiguration
• SecurityProperties● security.requireSsl = true● security.enableCsrf = true
kubrynski.com @[email protected]
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 @[email protected]
Production ready
• Monitoring endpoints● /health● /info● /metrics● /trace
• JMX / SSH
• Auditing
kubrynski.com @[email protected]
WAR
@EnableAutoConfiguration
public class WebApp extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder
configure(SpringApplicationBuilder application) {
return application.sources(SampleApplication.class);
}
}
kubrynski.com @[email protected]
Monitoring application
● ApplicationPidListener
● SpringApplication.addListeners(...)
● META-INF/spring.factoriesorg.springframework.context.ApplicationListener=\
org.springframework.boot.actuate.system.ApplicationPidListener
kubrynski.com @[email protected]
Rapid prototyping
● Spring Boot CLI
● $ spring run app.groovy
● $ spring test tests.groovy
kubrynski.com @[email protected]
How does it help?
● Dramatically reduces boilerplate code
● Enables polyglot
● Simplifies integration testing
● Simplifies environment maintenance
kubrynski.com @[email protected]
It's Spring
kubrynski.com @[email protected]
END! THANK YOU
kubrynski.com @[email protected]