Spring Boot Services
Spring Boot Services
micro services
Jakub Kubryński
[email protected]
@jkubrynski
whoami
History
• Single responsibility
• Loosely coupled
• Reliable
• Small, light
Micro way
Hard?
• Versioning
• Integration testing
source: spring.io
Revolution
@RestController
@EnableAutoConfiguration
public class HelloWorld {
@RequestMapping("/")
public String helloWorld() {
return "Hello World!";
}
}
Key features
• Starter dependencies
• Automatic configuration
• Production-ready environment
• SpringApplication
• @EnableAutoConfiguration
• @ConditionalOnClass
• @ConditionalOnBean
• @ConditionalOnExpression
Sample auto-configuration
@Configuration
@ConditionalOnClass({ MBeanExporter.class })
@ConditionalOnMissingBean({ MBeanExporter.class })
@ConditionalOnExpression("${spring.jmx.enabled:true}")
...
}
Starters
• spring-boot-starter
• spring-boot-starter-web
• spring-boot-starter-test
• spring-boot-starter-actuator
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>
Production ready
• Monitoring endpoints
●
/health
●
/info
●
/metrics
●
/mappings
• JMX / SSH
• Auditing
Properties
@ConfigurationProperties(prefix=”mail”)
public class MailProperties {
private InetAddress serverAddress;
private Resource template;
}
mail.serverAddress : 84.123.456.32
mail.template : classpath:mail.vm
Profiles
• spring.profiles.active = production,mysql
• log4j
• logback
• java.util.Logging
Security
• spring-boot-starter-security
• @SecurityAutoConfiguration
• @SecurityProperties
●
security.requireSsl = true
WAR
@Override
protected SpringApplicationBuilder
configure(SpringApplicationBuilder application) {
return application.sources(SampleApplication.class);
}
}
Tests
@SpringApplicationConfiguration(classes =
Application.class)
@ContextConfiguration(classes = Application,
loader = SpringApplicationContextLoader)
@IntegrationTest
It's Spring
How it helps?
●
Dramatically reduces boilerplate code
●
Enables polyglot
●
Simplifies integration testing
●
Simplifies environment maintenance
You have questions