Spring Boot
What is Spring Boot?
Spring Boot is an opinionated framework built on top of Spring that simplifies the setup and development of Spring applications. It provides:
- Auto-configuration: Automatically configures Spring beans based on classpath dependencies
- Starter dependencies: Curated dependency bundles (e.g.,
spring-boot-starter-web) - Embedded server: Tomcat, Jetty, or Undertow embedded — no WAR deployment needed
- Production-ready features: Health checks, metrics, externalized configuration
- No XML configuration: Convention over configuration
package com.example;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.context.annotation.*;
// @SpringBootApplication combines:
// @Configuration - Java config class
// @EnableAutoConfiguration - Enable Spring Boot auto-config
// @ComponentScan - Scan for @Component, @Service, etc.
@SpringBootApplication
// Exclude specific auto-configurations if needed:
// @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
// Customize SpringApplication
SpringApplication app = new SpringApplication(Application.class);
app.setBannerMode(Banner.Mode.OFF); // Disable startup banner
app.run(args);
}
}
// ApplicationRunner: runs code after application starts
@Component
public class StartupRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Application started successfully!");
// args.getOptionValues("server.port") - access command line args
}
}
Profiles
Spring profiles allow you to have different configurations for different environments (dev, test, prod):
// Profile-specific beans
@Configuration
public class DataSourceConfig {
@Bean
@Profile("dev")
public DataSource devDataSource() {
// H2 in-memory database for development
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.build();
}
@Bean
@Profile("prod")
public DataSource prodDataSource() {
// MySQL for production
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://prod-server:3306/mydb");
return ds;
}
}
// Activate profile:
// application.properties: spring.profiles.active=dev
// Command line: java -jar app.jar --spring.profiles.active=prod
// Environment variable: SPRING_PROFILES_ACTIVE=prod
# application-dev.properties (active when profile=dev)
server.port=8080
spring.datasource.url=jdbc:h2:mem:devdb
spring.jpa.hibernate.ddl-auto=create-drop
logging.level.com.example=DEBUG
# application-prod.properties (active when profile=prod)
# server.port=80
# spring.datasource.url=jdbc:mysql://prod-server:3306/mydb
# spring.jpa.hibernate.ddl-auto=validate
# logging.level.com.example=WARN
Spring Boot Actuator
# Actuator endpoints
management.endpoints.web.exposure.include=health,info,metrics,env,beans
management.endpoint.health.show-details=always
management.info.env.enabled=true
# Custom info
info.app.name=My Spring App
info.app.version=1.0.0
info.app.description=A sample Spring Boot application
# Actuator endpoints (after adding spring-boot-starter-actuator):
# GET /actuator/health - Application health status
# GET /actuator/info - Application info
# GET /actuator/metrics - Application metrics
# GET /actuator/env - Environment properties
# GET /actuator/beans - All Spring beans
# GET /actuator/mappings - All request mappings
Ready to Level Up Your Skills?
Explore 500+ free tutorials across 20+ languages and frameworks.