Q1: What is Spring Boot and how is it different from Spring Framework?
Answer: Spring Boot is an extension of the Spring Framework that simplifies the development of production-ready applications with minimal configuration. Unlike the traditional Spring Framework, Spring Boot offers:
- Auto-configuration
- Embedded servers (Tomcat, Jetty, Undertow)
- Spring Boot Starters
- Production-ready features (Monitoring, health checks)
Q2: What are the key features of Spring Boot?
Answer:
- Auto-configuration
- Spring Boot Starters
- Embedded web servers
- Production-ready monitoring (Actuator)
- Externalized Configuration
- Spring Boot Initializr
Q3: What is @SpringBootApplication
annotation?
Answer: It is a meta-annotation that combines:
@Configuration
(for Spring configurations)@EnableAutoConfiguration
(for auto-configuration)@ComponentScan
(for scanning components in the package)
Q4: How do you start a Spring Boot application?
Answer:
- Using
SpringApplication.run()
method in themain()
method:@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
- Using Spring Boot CLI
Q5: What is Spring Boot Initializr?
Answer: Spring Boot Initializr (https://start.spring.io/) is an online tool to create Spring Boot projects by selecting dependencies and generating a pre-configured project.
2. Spring Boot Configuration & Properties
Q6: What is application.properties
or application.yml
file?
Answer: A configuration file used to define properties such as:
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
OR using YAML format:
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
Q7: How to use custom properties in Spring Boot?
Answer: Define custom properties in application.properties
:
app.title=My Application
Access them using @Value
:
@Value("${app.title}")
private String appTitle;
OR using @ConfigurationProperties
:
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private String title;
}
3. Spring Boot REST APIs
Q8: How to create a RESTful API in Spring Boot?
Answer:
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
Q9: What is the difference between @Controller
and @RestController
?
Answer:
@Controller
returns views (HTML, JSP)@RestController
is a combination of@Controller + @ResponseBody
that returns JSON/XML responses
Q10: How to handle exceptions in Spring Boot?
Answer: Using @ControllerAdvice
:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleNotFound(ResourceNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
}
4. Spring Boot Security
Q11: How to secure a Spring Boot application?
Answer:
- Use
spring-boot-starter-security
- Define security configurations using
SecurityFilterChain
- Implement JWT authentication
Q12: How to implement JWT authentication?
Answer:
public String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60))
.signWith(SignatureAlgorithm.HS512, "secret-key")
.compact();
}
5. Spring Boot Microservices
Q13: What is Spring Cloud Netflix Eureka?
Answer: Eureka is a service registry used for microservice discovery.
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Q14: How to use Feign Client for inter-service communication?
Answer:
@FeignClient(name = "user-service")
public interface UserClient {
@GetMapping("/users/{id}")
User getUserById(@PathVariable Long id);
}
6. Spring Boot Performance & Best Practices
Q15: How to improve Spring Boot performance?
Answer:
- Enable caching (EhCache, Redis)
- Use database connection pooling
- Optimize database queries
- Use asynchronous processing (
@Async
) - Enable lazy initialization (
spring.main.lazy-initialization=true
)
Q16: How to enable logging in Spring Boot?
Answer:
logging.level.root=INFO
logging.level.org.springframework=DEBUG
7. Spring Boot Testing
Q17: What is @SpringBootTest
used for?
Answer: It loads the application context for integration testing.
@SpringBootTest
public class MyApplicationTests {
@Test
public void contextLoads() {
}
}
Q18: How do you mock dependencies in Spring Boot tests?
Answer: Using Mockito:
@MockBean
private UserService userService;