[Go to site: main page, start]

0% found this document useful (0 votes)
8 views45 pages

100 Java Questions Advance Java

The document provides an overview of Spring Boot, highlighting key concepts such as 'convention over configuration', the differences between Spring and Spring Boot, and how Spring Boot simplifies Java application development through features like auto-configuration and starter dependencies. It also covers various annotations, dependency management, profiles, RESTful services, security, logging, exception handling, and testing support in Spring Boot. Additionally, it explains how to manage database migrations, caching, and task scheduling, among other functionalities.

Uploaded by

poonambmore
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views45 pages

100 Java Questions Advance Java

The document provides an overview of Spring Boot, highlighting key concepts such as 'convention over configuration', the differences between Spring and Spring Boot, and how Spring Boot simplifies Java application development through features like auto-configuration and starter dependencies. It also covers various annotations, dependency management, profiles, RESTful services, security, logging, exception handling, and testing support in Spring Boot. Additionally, it explains how to manage database migrations, caching, and task scheduling, among other functionalities.

Uploaded by

poonambmore
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

1. Explain the concept of "convention over configuration" in Spring Boot.

Spring Boot uses the idea of "convention over configuration" to make


development easier. Instead of asking you to write long configuration files,
it provides default settings based on common use cases. This means if
you follow standard project structure and naming, Spring Boot will
automatically configure many things for you. You can still customize if
needed, but in most cases, the default settings just work.

Example:

If you place your controller classes inside a specific package, Spring Boot
will automatically scan and register them, no need to manually define
each one.

2. What is the difference between Spring and Spring Boot?

Spring Framework is a powerful tool to build Java applications, but it needs


a lot of setup — like XML or Java-based configuration, server setup,
dependency management, etc.

Spring Boot is built on top of Spring and removes that extra setup work. It
uses auto-configuration, built-in servers (like Tomcat), and ready-to-use
starter dependencies to help you create applications faster.

In short: Spring gives you tools, Spring Boot gives you a complete toolkit
with default setup to start quickly.

3. How does Spring Boot simplify the development of Java applications?

Spring Boot helps developers by handling most of the setup automatically.


Here's how:

Auto-configuration: It configures beans automatically based on the


libraries you include.
Starter dependencies: Just add one starter (like spring-boot-starter-web)
and it brings everything you need to build web apps.

Embedded servers: No need to install Tomcat or Jetty separately — they


come built-in.

Production-ready features: With tools like Spring Boot Actuator, you get
health checks, metrics, and more.

Developer tools: Features like hot-reloading (DevTools) make development


faster and smoother.

4. What are the various ways to create a Spring Boot application?

Spring Initializr ()

A web-based tool where you choose project type, dependencies, and


download a ready-to-run project.

Spring Boot CLI

A command-line tool to quickly run Groovy-based Spring Boot apps.

Manual Setup

You can create a Maven or Gradle project and add Spring Boot
dependencies manually.

Most developers prefer Spring Initializr because it’s simple and fast.

5. What is the role of the @SpringBootApplication annotation?

@SpringBootApplication is a shortcut annotation that combines three key


annotations:

@Configuration – marks the class as a source of bean definitions.

@EnableAutoConfiguration – enables Spring Boot’s auto-configuration


feature.

@ComponentScan – tells Spring to scan the current package and its sub-
packages for components like controllers, services, etc.

So when you use @SpringBootApplication, you don’t need to write all


three separately. It bootstraps the app and sets up everything you need to
start.

6. Explain the concept of auto-configuration in Spring Boot.


Auto-configuration is one of the most useful features in Spring Boot. It
tries to automatically configure your application based on the libraries you
have on your classpath.

For example, if Spring Boot finds the spring-boot-starter-data-jpa


dependency and a database like H2 or MySQL in your project, it will
automatically configure a DataSource, JPA-related beans, and more —
without you writing any configuration.

It works behind the scenes using @Conditional annotations and checks


what classes or beans are present before applying default settings.

Autoconfigurations

7. How does Spring Boot handle dependency management?

Spring Boot simplifies dependency management using starter


dependencies. These are pre-defined sets of libraries bundled together for
common tasks.

For example:

spring-boot-starter-web includes everything needed to build a REST API


(Spring MVC, Jackson, embedded Tomcat, etc.).

spring-boot-starter-data-jpa brings in Hibernate, JPA API, and a database


driver (like H2 for development).

Also, Spring Boot uses a parent POM (in Maven) to manage compatible
versions of libraries, so you don’t have to worry about version conflicts.

8. What is the purpose of the [Link] or [Link] file?

Used for externalized configuration of:

DB connection

Logging

Server port
Custom application settings

9. How can you override the default properties in Spring Boot?

You can override default settings in multiple ways:

[Link] or [Link]

Environment variables

Command-line arguments (like -[Link]=8081)

Programmatically using [Link]()

Spring Boot follows a priority order. The general rule is:

Command-line > Environment variables > [Link]/yml >


Default values

10. What is the purpose of the @Autowired annotation in Spring Boot?

@Autowired is used for dependency injection, which means Spring will


automatically create and inject required objects (beans) for you.

You can use @Autowired in:

Fields

Constructors (recommended)

Setters

For example, if you have a UserService bean and another class needs it,
you just add @Autowired and Spring will handle the wiring — no need to
new the object manually.

11. Explain the concept of profiles in Spring Boot.

Spring Boot profiles help you manage different configurations for different
environments — like development, testing, or production.
Each profile can have its own set of settings and beans. This way, you
don’t have to change your main code when switching environments.

Example:

[Link] for development

[Link] for production

When you activate a profile, Spring Boot will load the related properties
file and beans automatically.

12. How can you enable a specific profile in Spring Boot?

You can activate a profile in several ways:

In [Link] or [Link]:

[Link]=dev

As a command-line argument when starting the app:

java -jar [Link] --[Link]=prod

As an environment variable:

SPRING_PROFILES_ACTIVE=test

Once a profile is active, Spring Boot loads the matching config and beans
for that profile.

13. How does Spring Boot support the creation of RESTful web services?

Spring Boot makes it easy to create REST APIs using Spring MVC. Here's
how:

Use @RestController to create REST controllers (which return JSON/XML by


default).

Use annotations like:

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping for


endpoints
@PathVariable to extract values from URLs

@RequestParam to read query parameters

Supports content negotiation (returns data in requested format)

Integrates easily with tools like Swagger/OpenAPI for API documentation

Supports custom exception handling using @ControllerAdvice

14. What is Spring Data JPA, and how does it integrate with Spring Boot?

Spring Data JPA is a part of the Spring ecosystem that helps simplify
database access using JPA (Java Persistence API).

Instead of writing SQL queries or boilerplate code, you just:

Create Entity classes (for database tables)

Create Repository interfaces (like JpaRepository or CrudRepository)

Spring Boot auto-configures everything based on your setup

Spring Boot automatically:

Sets up JPA configurations

Connects to your database

Implements basic CRUD methods (like save(), findById())

This saves time and reduces repetitive code.

15. Explain the role of Spring Security in Spring Boot applications.

Spring Security provides a complete security solution for your application.


It handles:

Authentication – verifying who the user is

Authorization – checking what the user is allowed to do

With Spring Boot, it’s easy to integrate Spring Security. It secures your
REST endpoints or web pages by default and can support:
Form login

Basic Auth

JWT tokens

OAuth2 login (Google, GitHub, etc.)

It uses security filters and integrates smoothly with Spring MVC, allowing
you to secure routes using annotations like @PreAuthorize.

16. How can you enable logging in a Spring Boot application?

Spring Boot uses Logback as the default logging framework. Logging is


enabled automatically — you don’t need to add any extra setup to start
using it.

To log messages in your code, you can use SLF4J (which works with
Logback):

@Slf4j // Lombok annotation

public class MyService {

public void doSomething() {

[Link]("Processing...");

[Link]("Something went wrong");

You can configure log settings (like log level or log file path) in
[Link]:

[Link]=DEBUG

[Link]=[Link]

You can also use a custom [Link] file for advanced configurations.

17. What is the purpose of the @RestController annotation?

@RestController is a shortcut for two annotations:


@Controller – tells Spring this class handles web requests

@ResponseBody – tells Spring to return the response as JSON or XML


(instead of rendering a view)

So when you use @RestController, all your methods return data (usually
JSON) directly to the client — perfect for building REST APIs.

Example:

@RestController

public class UserController {

@GetMapping("/users")

public List<User> getUsers() {

return [Link]();

18. How can you handle exceptions in a Spring Boot application?

Spring Boot allows you to handle exceptions in a clean and flexible way:

Method-level handling using @ExceptionHandler:

@ExceptionHandler([Link])

public ResponseEntity<String>
handleNotFound(ResourceNotFoundException ex) {

return
[Link](HttpStatus.NOT_FOUND).body([Link]());

Global handling using @ControllerAdvice:

This lets you manage exceptions for all controllers in one place.
@ControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler([Link])

public ResponseEntity<String> handleAll(Exception ex) {

return
[Link](HttpStatus.INTERNAL_SERVER_ERROR).body("Error:
" + [Link]());

19. Explain the difference between @Component, @Service, and


@Repository annotations.

All are Spring stereotypes:

@Component is generic

@Service is used for business logic

@Repository is for database access and enables exception translation

20. What is the purpose of the @Transactional annotation in Spring Boot?

@Transactional is used to manage database transactions automatically. It


ensures that:

If everything in the method runs fine, the changes are committed to the
database.

If an exception happens, Spring will roll back the transaction to keep your
data safe.

You can use it at the method or class level:

@Transactional

public void transferMoney(Account from, Account to, BigDecimal amount)


{

debit(from, amount);

credit(to, amount);
}

It helps maintain ACID properties (Atomicity, Consistency, Isolation,


Durability) in your database operations.

21. How does Spring Boot support database migrations?

Spring Boot supports automatic database schema management using


tools like Flyway and Liquibase.

These tools allow you to write versioned SQL scripts (like


V1__create_table.sql, V2__add_column.sql), and Spring Boot will run them
in order when the application starts.

This helps:

Keep your database schema up to date

Avoid manual changes in each environment

Track version history of schema changes

To use Flyway:

<!-- In [Link] -->

<dependency>

<groupId>[Link]</groupId>

<artifactId>flyway-core</artifactId>

</dependency

22. What is the role of Spring Boot Actuator?

Actuator provides production-ready monitoring features through endpoints


like:

/health – app health

/info – app metadata

/metrics – performance metrics


/env, /loggers, etc.

You can also define custom indicators and endpoints.

23. How can you configure caching in a Spring Boot application?

Steps:

Add a caching library

<dependency>

<groupId>[Link]</groupId>

<artifactId>spring-boot-starter-cache</artifactId>

</dependency>

Use @EnableCaching

@EnableCaching

@SpringBootApplication

public class MyApp {}

Use caching annotations on methods:

@Cacheable – caches method result

@CachePut – updates cache with new value

@CacheEvict – removes cache entry

Configure properties in [Link] or [Link]

[Link]=ehcache

24. Explain the concept of Bean scopes in Spring Boot.

Bean scopes define lifecycle and visibility:

singleton (default): one instance for app

prototype: new instance per request

request: one per HTTP request

session: one per session

application: shared in servlet context


websocket: one per WebSocket session

25. What is the purpose of the @Value annotation in Spring Boot?

@Value injects values from:

Properties file

Environment variables

Command-line args

Example:

@Value("${[Link]}")

private int port;

26. How can you enable Cross-Origin Resource Sharing (CORS) in a Spring
Boot application?

CORS (Cross-Origin Resource Sharing) allows your frontend (like React or


Angular) to call your backend API even if they are on different domains or
ports.

You can enable CORS in two ways:

Two ways:

1. Using @CrossOrigin annotation:

@CrossOrigin(origins = "<[Link]

@RestController

public class MyController {

@GetMapping("/api/data")

public String getData() {

return "Hello from backend!";

}
}

2. Globally using WebMvcConfigurer:

@Configuration

public class WebConfig implements WebMvcConfigurer {

@Override

public void addCorsMappings(CorsRegistry registry) {

[Link]("/**")

.allowedOrigins("<[Link]

.allowedMethods("GET", "POST", "PUT", "DELETE");

27. Explain the concept of a starter dependency in Spring Boot.

A starter dependency is a convenient way to include a group of related


libraries in your project.

For example:

<dependency>

<groupId>[Link]</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

This single dependency brings in:

Spring MVC

Jackson (for JSON)

Embedded Tomcat

Logging

28. What is the purpose of the @Async annotation in Spring Boot?


The @Async annotation makes a method run in a separate thread, so it
doesn’t block the main thread.

This is helpful when doing tasks like sending emails, processing files, or
calling external APIs — things that can take time.

You must:

Enable async support with @EnableAsync

Configure a TaskExecutor if needed

29. How does Spring Boot support the creation of WebSocket applications?

You can:

Use Spring’s WebSocket API

Define handler classes using WebSocketHandler

Annotate config class with @EnableWebSocket

Integrate with SockJS for fallback support

30. Explain the concept of conditional bean registration in Spring Boot.

Spring Boot allows you to create beans only when certain conditions are
met using conditional annotations.

Some common conditional annotations:

@ConditionalOnClass: Bean is created only if a specific class is on the


classpath.

@ConditionalOnMissingBean: Creates a bean only if the same type is not


already defined.

@ConditionalOnProperty: Creates a bean only if a specific property exists


or has a certain value.

31. How can you schedule tasks in a Spring Boot application?


Spring Boot makes it easy to run tasks at regular intervals using the
scheduling feature.

Steps:

Enable scheduling in your main or config class:

@EnableScheduling

@SpringBootApplication

public class MyApp {}

Use @Scheduled on any method:

@Scheduled(fixedRate = 5000) // runs every 5 seconds

public void runTask() {

[Link]("Running scheduled task...");

You can schedule tasks using:

fixedRate – time between method calls

fixedDelay – time after method finishes

cron – for custom scheduling like @Scheduled(cron = "0 0 * * * *") (every


hour)

Useful for tasks like backups, report generation, or sending emails.

32. What is the purpose of the @RequestMapping annotation?

@RequestMapping is used to map HTTP requests to specific controller


methods.

It can define:

The URL path (value)

The HTTP method (GET, POST, etc.)


Optional parameters, headers, or consumes/produces types

Example:

@RequestMapping(value = "/users", method = [Link])

public List<User> getAllUsers() {

return [Link]();

Although @RequestMapping works for all HTTP methods, you can use
shortcuts like @GetMapping, @PostMapping, etc., for better readability.

33. How can you enable HTTPS in a Spring Boot application?

Steps:

Generate SSL certificate and and a .p12 keystore.

Add these properties in [Link]:

[Link]=8443

[Link]-store=classpath:keystore.p12

[Link]-store-password=yourpass

[Link]-store-type=PKCS12

Place the keystore.p12 file inside your resources folder.

Once done, your app will be available at [Link] with SSL


enabled. This is important for securing sensitive data in transit.

34. Explain the concept of externalized configuration in Spring Boot.

Configuration values (like DB URL, ports, etc.) can be moved to external


sources:

[Link]

Environment variables

Command-line args
Config servers (in microservices)

This enables easy environment-specific setups.

35. What is the purpose of the @RestControllerAdvice annotation?

@RestControllerAdvice is a specialized annotation used to handle


exceptions and shared logic for all REST controllers.

It combines:

@ControllerAdvice – to apply common behavior across multiple controllers

@ResponseBody – so the response is returned as JSON/XML, not a view

Use cases:

Global exception handling

Adding common model attributes

Modifying response bodies

Example:

@RestControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler([Link])

public ResponseEntity<String>
handleNotFound(ResourceNotFoundException ex) {

return
[Link](HttpStatus.NOT_FOUND).body([Link]());

This keeps your controller code clean and separates error-handling logic.

36. How does Spring Boot support testing of applications?


Spring Boot provides great support for unit testing and integration testing
with built-in tools and annotations.

Some commonly used features:

Annotations:

@SpringBootTest – loads the full application context for integration testing

@WebMvcTest – tests only the web layer (like controllers)

@DataJpaTest – tests the JPA (database) layer

Mocking support:

@MockBean – create and inject mock beans

Combine with Mockito to simulate behaviors

Test utilities:

TestRestTemplate – to call real endpoints in integration tests

MockMvc – to test controller layer without starting the full server

Spring Boot also runs tests using embedded servers, so you don’t need to
deploy your app externally to run full end-to-end tests.

37. Explain the purpose of the @PathVariable annotation in Spring Boot.

@PathVariable is used to extract values from the URL path and pass them
into your controller method as parameters.

Example:

@GetMapping("/user/{id}")

public User getUser(@PathVariable Long id) { ... }

38. What is the difference between @ControllerAdvice and


@RestControllerAdvice?

Both are used to apply common behavior (like exception handling) across
multiple controllers.
@ControllerAdvice – Used for MVC controllers that return views (like JSP,
Thymeleaf).

@RestControllerAdvice – Used for REST APIs, and it automatically includes


@ResponseBody, so it returns JSON/XML responses.

Use @RestControllerAdvice when building APIs, and @ControllerAdvice


when working with web pages.

39. How can you enable Swagger documentation in a Spring Boot


application?

Steps:

Add Swagger dependencies.

Configure metadata (title, version, etc.)

Use annotations like @Api, @ApiOperation

Access Swagger UI at /[Link]

40. What is the purpose of the @RequestBody annotation in Spring Boot?

@RequestBody is used to bind the HTTP request body (usually JSON or


XML) to a Java object.

Example:

@PostMapping("/user")

public void createUser(@RequestBody User user) { ... }

41. How does Spring Boot support message queuing?

Spring Boot supports message queues like RabbitMQ and Apache Kafka for
building asynchronous and event-driven systems.

Key features:

Add dependencies like:

spring-boot-starter-amqp (for RabbitMQ)


spring-kafka (for Kafka)

Use listeners to consume messages:

@RabbitListener(queues = "order-queue")

public void receiveMessage(String message) {

[Link]("Received: " + message);

@KafkaListener(topics = "user-topic")

public void listen(String data) {

[Link]("Kafka: " + data);

Spring Boot auto-configures connections based on what’s in the classpath


and [Link].

Also, you can use Spring’s messaging abstractions like Message,


MessageChannel, and MessageConverter to work with different formats.

42. What is the purpose of the @Scheduled annotation in Spring Boot?

@Scheduled is used to run methods on a schedule — like running a task


every few seconds, minutes, or at specific times.

Example:

@Scheduled(fixedDelay = 5000)

public void runTask() { ... }

Supports fixedRate, fixedDelay, and cron.

43. Explain the concept of Actuator endpoints in Spring Boot.

Spring Boot Actuator exposes endpoints that give useful information about
the application’s health and internals.

Some commonly used endpoints:


/actuator/health – shows app health status

/actuator/info – displays app info (like version, description)

/actuator/metrics – CPU, memory, HTTP request metrics

/actuator/env – view environment properties

/actuator/beans – see all registered Spring beans

/actuator/loggers – manage logging levels at runtime

To use Actuator:

<dependency>

<groupId>[Link]</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

You can also customize or secure these endpoints using your


[Link].

44. How can you configure connection pooling in a Spring Boot


application?

Spring Boot uses HikariCP as the default connection pool for managing
database connections efficiently.

You can configure pooling options in [Link]:

[Link]-pool-size=10

[Link]-timeout=30000

You can also use Tomcat JDBC or DBCP2.

45. What is the purpose of the @CrossOrigin annotation in Spring Boot?

@CrossOrigin is used to enable Cross-Origin Resource Sharing (CORS),


which allows your frontend (on a different domain or port) to make API
calls to your backend.
Without CORS enabled, browsers block requests from different origins for
security reasons.

Example:

@CrossOrigin(origins = "<[Link]

@RestController

public class MyController { ... }

46. How does Spring Boot support internationalization and localization?

Spring Boot makes it easy to build apps that support multiple languages
using internationalization (i18n).

Message bundles (messages_en.properties, messages_fr.properties)

MessageSource bean configuration

Resolves locale using Accept-Language header

Enables dynamic text based on user’s locale.

47. Explain the concept of a health indicator in Spring Boot Actuator.

A health indicator shows the status of a specific part of your app, like the
database, disk space, or custom services.

These health indicators are part of the /actuator/health endpoint.

Spring Boot includes built-in health checks:

Database connection (DataSourceHealthIndicator)

Disk space (DiskSpaceHealthIndicator)

RabbitMQ, Redis, etc.

You can also create your own:


@Component

public class MyServiceHealthIndicator implements HealthIndicator {

@Override

public Health health() {

boolean isHealthy = checkSomething();

return isHealthy ? [Link]().build() : [Link]()

.withDetail("error", "Service is down").build();

48. What is the purpose of the @RequestBody annotation in Spring Boot?

@RequestBody is used to bind the HTTP request body (usually JSON) to a


Java object.

It automatically converts JSON into a Java object using Jackson (or any
configured converter).

Example:

@PostMapping("/user")

public void createUser(@RequestBody User user) { ... }

49. How can you enable request logging in a Spring Boot application?

To see incoming HTTP requests and debug better, you can enable request
logging.

Simple way:

Add this to [Link]:

[Link]=DEBUG
Advanced way (using Logback):

Create a [Link] and configure logging pattern and levels.

Third-party option:

Use Spring Boot filters like CommonsRequestLoggingFilter for detailed


logs:

@Bean

public CommonsRequestLoggingFilter logFilter() {

CommonsRequestLoggingFilter filter = new


CommonsRequestLoggingFilter();

[Link](true);

[Link](true);

[Link](10000);

return filter;

50. Explain the purpose of the @ExceptionHandler annotation in Spring


Boot.

@ExceptionHandler is used to catch and handle specific exceptions in


your controller methods.

Why? So your app doesn’t crash and you can send a proper response (like
a 404 or custom error message).

Example:

@ExceptionHandler([Link])

public ResponseEntity<String> handle(MyException ex) {

return [Link](500).body("Error occurred");


}

51. How does Spring Boot support asynchronous processing?

Spring Boot allows methods to run asynchronously in a separate thread


using the @Async annotation. This helps improve performance by not
blocking the main thread during long-running tasks (like sending emails or
processing files).

@Async on methods

@EnableAsync in config

Optional TaskExecutor bean for thread management

Supports returning CompletableFuture, Future, void.

52. What is the purpose of the @EnableAutoConfiguration annotation in


Spring Boot?

@EnableAutoConfiguration tells Spring Boot to automatically configure


beans and settings based on the libraries present in the classpath.

For example:

If Spring MVC is on the classpath, it sets up a web app.

If Spring Data JPA is present, it configures a datasource and JPA


repositories.

This saves a lot of manual configuration and helps you get started quickly.

53. How can you configure a connection pool in Spring Boot?

Spring Boot uses HikariCP as the default connection pool for databases.

You can configure it in [Link]:

[Link]-pool-size=10

[Link]-idle=5
[Link]-url=jdbc:mysql://localhost:3306/mydb

[Link]=root

[Link]=pass

If you prefer other pools like Tomcat JDBC or DBCP2, just exclude Hikari
and add the respective dependency.

Connection pooling is important to reduce the cost of repeatedly opening


and closing DB connections.

54. Explain the concept of transaction management in Spring Boot.

Spring Boot supports transaction management using the @Transactional


annotation.

It helps you in:

ACID compliance

Automatic rollback on exceptions

Clean resource handling

55. What is the purpose of the @Async annotation in Spring Boot?

@Async marks a method to run in the background, freeing the caller


thread to continue execution without waiting.

It’s useful for:

Sending emails

Generating reports

Calling external APIs

Processing background jobs

Remember: To use @Async, you must also enable it with @EnableAsync in


your configuration.
56. How does Spring Boot handle security vulnerabilities like XSS and
CSRF?

Spring Boot (with Spring Security) provides basic protections against


common web vulnerabilities like:

XSS (Cross-Site Scripting):

By default, template engines like Thymeleaf escape user inputs.

You can also add security headers (e.g., Content-Security-Policy) to


prevent script execution from untrusted sources.

CSRF (Cross-Site Request Forgery):

Spring Security automatically generates a CSRF token for every form and
checks it on form submissions.

This prevents unauthorized commands from being executed on behalf of


the user.

Best practices for developers:

Always validate and sanitize user input.

Use HTTPS in production.

Don’t disable CSRF protection unless you know exactly why.

57. What is the purpose of the @Cacheable annotation in Spring Boot?

@Cacheable is used to store the result of a method so that future calls


with the same input don't need to run the method again — it just returns
the cached value.

Example:

@Cacheable("users")

public User getUserById(Long id) { ... }

Improves performance by avoiding repetitive computation or DB calls.

58. How can you handle file uploads in a Spring Boot application?
Spring Boot makes file upload easy using MultipartFile.

Steps:

Controller method:

@PostMapping("/upload")

public String uploadFile(@RequestParam("file") MultipartFile file) {

// save or process the file

return "Uploaded successfully!";

Set size limits in [Link]:

[Link]-file-size=5MB

[Link]-request-size=10MB

Spring Boot handles the rest — parsing multipart requests and converting
uploaded files into MultipartFile.

You can also write files to disk or store them in a database/cloud storage.

59. Explain the concept of circuit breakers in Spring Boot.

A circuit breaker helps prevent your app from failing repeatedly when a
downstream service (like an API or database) is not responding.

It works like this:

If a service fails multiple times, the circuit opens, and further calls are
blocked to avoid stress.

After some time, it enters a half-open state to test if the service is back.

If successful, it closes the circuit and resumes normal flow.

In Spring Boot, use Resilience4j (or Hystrix) for circuit breakers:


@CircuitBreaker(name = "inventoryService", fallbackMethod = "fallback")

public Product getInventory(Long id) {

// call to external service

This improves fault tolerance in microservice architectures.

60. What is the purpose of the @ControllerAdvice annotation in Spring


Boot?

@ControllerAdvice is used to handle common logic across all controllers.

You can define:

Global exception handlers using @ExceptionHandler

Custom model attributes shared across multiple controllers using


@ModelAttribute

Custom data binders with @InitBinder

61. How does Spring Boot handle database connections and pooling?

Spring Boot automatically sets up a connection pool to manage database


connections efficiently.

HikariCP is the default and fastest connection pool in Spring Boot.

Other supported pools: Tomcat JDBC, DBCP2 (you can switch by changing
dependencies).

[Link]=jdbc:mysql://localhost:3306/mydb

[Link]=root

[Link]=pass

[Link]-pool-size=10

Connection pooling:

Reduces overhead of opening/closing DB connections.


Reuses connections to improve performance.

Works well with Spring's transaction management to ensure rollback and


ACID compliance.

62. What is the purpose of the @RestControllerAdvice annotation in Spring


Boot?

@RestControllerAdvice is used to handle exceptions globally in REST APIs


and automatically return responses in JSON/XML format.

It combines:

@ControllerAdvice – for applying global logic to controllers

@ResponseBody – so responses are automatically serialized

Example:

@RestControllerAdvice

public class GlobalRestHandler {

@ExceptionHandler([Link])

public ResponseEntity<String>
handleNotFound(UserNotFoundException ex) {

return [Link](404).body([Link]());

Use this to avoid repeating exception handling code in every controller.

63. Explain the concept of lazy initialization in Spring Boot.

Lazy initialization means Spring creates a bean only when it’s first needed,
instead of at application startup.

Beans are created on first use, not at startup

Saves memory and improves startup time

You can force eager init using @Lazy(false)


64. How can you configure a custom data source in Spring Boot?

If the default [Link].* properties aren't enough, you can define


a custom DataSource bean.

Steps:

Add driver dependency

Create a config class with @Bean returning a DataSource (e.g.,


HikariDataSource)

Set properties like URL, username, password

Example:

@Bean

public DataSource dataSource() {

HikariConfig config = new HikariConfig();

[Link](...);

return new HikariDataSource(config);

65. What is the purpose of the @Profile annotation in Spring Boot?

@Profile is used to load beans or configuration only for specific


environments, such as:

dev – for development

test – for testing

prod – for production

Example:

@Profile("dev")

@Component

public class DevBean { ... }


To activate a profile:

[Link]=dev

This helps you run the same app with different settings in different
environments — without changing code.

66. How does Spring Boot handle authentication and authorization?

Spring Boot uses Spring Security to provide both authentication (who you
are) and authorization (what you're allowed to do).

Authentication: Form login, JWT, OAuth2, DB, LDAP

Authorization: Role/permission-based access control

Declarative rules via annotations like @PreAuthorize, @Secured

67. What is the purpose of the @Bean annotation in Spring Boot?

@Bean is used to tell Spring, “Hey, create and manage this object as a
bean.”

It’s commonly used inside a @Configuration class when you want to


define custom logic for creating an object

Example:

@Bean

public MyService myService() {

return new MyServiceImpl();

68. How can you enable server-side validation in a Spring Boot


application?

Server-side validation checks incoming data before it’s processed or


saved. Spring Boot uses Hibernate Validator (JSR-380) under the hood.
Steps:

Add spring-boot-starter-validation

Use annotations like @NotNull, @Size

Add @Valid or @Validated in controllers

Example:

@PostMapping

public ResponseEntity<?> save(@Valid @RequestBody User user) { ... }

69. Explain the concept of the Spring Boot Starter Parent.

The Spring Boot Starter Parent is a special Maven parent POM that
provides:

Default versions for dependencies

Plugin configs

Java version, encoding

It reduces need for manual configuration.

70. What is the purpose of the @ConfigurationProperties annotation?

@ConfigurationProperties is used to map values from


[Link] or [Link] to a Java class.

This is helpful when you want to group related settings.

Example:

@ConfigurationProperties(prefix="app")

public class AppConfig {

private String name;

}
Requires @EnableConfigurationProperties or be annotated with
@Component.

71. How can you customize error handling in a Spring Boot application?

Spring Boot provides multiple ways to handle and customize errors so


your users don’t see raw stack traces.

Options:

@ControllerAdvice with @ExceptionHandler

Create a CustomErrorController for /error

Customize ErrorAttributes or use ErrorViewResolver

72. What is the purpose of the @ConditionalOnProperty annotation?

@ConditionalOnProperty tells Spring to only create a bean if a specific


property exists and has a certain value.

Useful for feature toggles or enabling/disabling configs based on


environment.

Example:

@ConditionalOnProperty(name = "[Link]", havingValue = "true")

@Bean

public FeatureBean featureBean() { ... }

73. How does Spring Boot support hot reloading during development?

Spring Boot supports hot reloading using the DevTools module.

Via Spring Boot DevTools:

Auto restarts app on classpath changes


Enables live reload (e.g., with browser plugin)

Add this in [Link]:

<dependency>

<groupId>[Link]</groupId>

<artifactId>spring-boot-devtools</artifactId>

<optional>true</optional>

</dependency>

74. What is the purpose of the @EnableScheduling annotation in Spring


Boot?

@EnableScheduling turns on Spring’s scheduling support.

Once enabled, you can run methods automatically using @Scheduled.

@EnableScheduling

@SpringBootApplication

public class App { ... }

Without @EnableScheduling, scheduled methods will be ignored.

75. How can you externalize configuration in a Spring Boot application?

Spring Boot lets you keep configuration outside your code, making it
easier to change values per environment (like dev, test, prod).

Common ways:

[Link] / [Link]

Command-line args

Environment variables

Config servers (Spring Cloud Config)

76. Explain the concept of YAML configuration in Spring Boot.


YAML ([Link]) is an alternative to [Link]. It’s
cleaner and more readable, especially for nested settings.

Example:

server:

port: 8081

spring:

datasource:

url: jdbc:mysql://localhost:3306/db

Indentation is important in YAML, use spaces, not tabs. Spring Boot


supports both .yml and .properties, so you can use what you prefer.

77. What is the purpose of the @ComponentScan annotation?

@ComponentScan tells Spring where to look for your beans


(@Component, @Service, @Repository, etc.).

By default, it scans the package of your main class. But you can customize
it.

Example:

@ComponentScan(basePackages = "[Link]")

78. How does Spring Boot support microservices development?

Spring Boot is a great choice for building microservices because it’s:

Lightweight and fast to start

Comes with embedded servers (no need for external Tomcat)

Has excellent support for REST APIs and Spring Data

With Spring Cloud, it becomes even more powerful:


Eureka – service discovery

Spring Cloud Gateway – routing and load balancing

Config Server – centralized configuration

Circuit breakers – with Resilience4j

It also works well with Docker and Kubernetes, making it ideal for cloud-
native apps.

79. What is the purpose of the @EnableAutoConfiguration annotation?

@EnableAutoConfiguration tells Spring Boot to automatically configure


your application based on the libraries available in the classpath.

Example:

If you have spring-boot-starter-web, it sets up Spring MVC.

If you have Spring Data JPA, it sets up Hibernate and a datasource.

You usually don’t use it directly because it’s part of:


@SpringBootApplication

80. How can you integrate a third-party library with Spring Boot?

You can easily use external libraries (like Apache POI, Stripe, Twilio, etc.)
with Spring Boot.

Add the library dependency (e.g., in [Link])

Configure via @Configuration and @Bean

Inject and use the library as a Spring-managed bean

81. What is the purpose of the @Import annotation in Spring Boot?

@Import is used when you want to include another @Configuration class


into your current configuration.
Instead of using @ComponentScan to pick it up automatically, @Import
lets you add it manually.

Example:

@Import([Link])

public class MainConfig { }

82. How can you run a block of code at Spring Boot startup?

To run code when the application starts, implement one of these


interfaces:

CommandLineRunner – gets raw String[] args

ApplicationRunner – gets parsed ApplicationArguments

Example:

@Bean

public CommandLineRunner run() {

return args -> {

[Link]("App started!");

};

83. What is the purpose of the @ConditionalOnClass annotation?

@ConditionalOnClass makes sure a bean or configuration is only loaded if


a specific class is available in the classpath.

Use case: You want to conditionally enable a feature only if a certain


dependency is present.

Example:
@ConditionalOnClass([Link])

public class DataSourceConfig { ... }

84. How can you create a custom banner in Spring Boot?

Spring Boot shows a banner in the console when the app starts. You can
easily customize it.

Steps:

Create a file named [Link]

Place it in src/main/resources

Add ASCII art, app info, or any message

Want a banner image instead? Use:

[Link]=classpath:[Link]

To disable the banner:

[Link]-mode=off

Try websites like to generate cool ASCII art banners.

85. Explain the concept of Spring Boot auto-configuration report.

When things don’t auto-configure as expected, the auto-configuration


report helps you debug.

Enable it by adding this to [Link]:

debug=true

You get a report of included and excluded auto-configurations in the


console, useful for debugging config issues.

86. How does Spring Boot support configuration metadata generation?


Spring Boot can generate metadata files that help IDEs like IntelliJ or VS
Code offer autocomplete and validation for your custom properties.

This happens when you:

Use @ConfigurationProperties on your config classes.

Add the spring-boot-configuration-processor dependency:

87. What is the purpose of the @ImportResource annotation?

@ImportResource lets you include XML-based Spring configurations in a


Java-based Spring Boot app.

Example:

@ImportResource("classpath:[Link]")

public class AppConfig { }

88. How can you customize the Spring Boot application context?

You can customize the application context (before it's fully initialized)
using:

Creating a subclass of SpringApplication

Using SpringApplicationBuilder

Adding ApplicationContextInitializer or listeners

89. How can you enable or disable specific Spring Boot Actuator
endpoints?

You can manage Actuator endpoints via [Link]:

[Link]=health,info

[Link]=true

[Link]=false

90. How does Spring Boot handle logging?


Spring Boot uses Logback as the default logging framework, but you can
also switch to Log4j2, Java Util Logging, etc.

Basic logging configuration in [Link]:

[Link]=INFO

[Link]=DEBUG

[Link]=[Link]

91. What is the purpose of the @EnableConfigurationProperties


annotation?

This annotation tells Spring Boot to bind configuration properties to a plain


class — even if it’s not a component (@Component or @Service).

It’s mostly used when you want to keep configuration classes clean and
separate.

Example:

@EnableConfigurationProperties([Link])

public class MyAppConfig {

Now Spring Boot will bind values from [Link] or


[Link] to MyAppProperties.

If your @ConfigurationProperties class is already annotated with


@Component, you don’t need this.

92. How can you access command-line arguments in Spring Boot?

Spring Boot apps can read arguments passed from the terminal using:

ApplicationArguments (recommended)
CommandLineRunner or ApplicationRunner

Example with ApplicationArguments:

@Autowired

private ApplicationArguments args;

public void printArgs() {

[Link]("Source Args: " + [Link]());

[Link]("Option Names: " + [Link]());

You can run the app with:

java -jar [Link] --mode=prod --port=8080

93. What is the difference between @Controller and @RestController?

@Controller:

Used in web applications that return views like HTML or JSP pages.

It is part of the Spring MVC pattern.

If you return a string, Spring assumes it is the name of a view (like an


HTML file).

To send JSON from here, you must also add @ResponseBody to the
method.

@RestController:

Used in REST APIs where you want to return JSON or XML directly.

It's the same as using @Controller + @ResponseBody on every method.

Spring automatically converts Java objects to JSON (using Jackson) and


sends them in the response.

94. How can you enable method-level security in Spring Boot?

Spring Boot allows you to secure individual methods using annotations.

Steps:
Enable method-level security:

@EnableGlobalMethodSecurity(prePostEnabled = true)

Use any of these:

@PreAuthorize("hasRole('ADMIN')")

@Secured("ROLE_USER")

@RolesAllowed("ADMIN") (requires additional config)

Example:

@PreAuthorize("hasRole('ADMIN')")

public void deleteUser(Long id) {

// secured method

95. What is the purpose of the @SessionAttributes annotation?

@SessionAttributes is used in Spring MVC to store model data in the HTTP


session so it can survive across multiple requests.

Example:

@Controller

@SessionAttributes("user")

public class UserController {

@ModelAttribute("user")

public User user() {

return new User();

96. How can you configure a Spring Boot app to run on a different port?
By default, Spring Boot apps run on port 8080. To change it, just update
the [Link] or [Link] file.

Example ([Link]):

[Link]=8081

97. What is the difference between @ModelAttribute and


@RequestParam?

@ModelAttribute

Used when you want to bind multiple form fields to a Java object.

Spring automatically fills the fields of the object using the form data.

Very useful when handling HTML forms (like registration or login).

@RequestParam

Used when you want to get a single value from the request, like a query
parameter or a form field.

You manually bind each value to a method parameter.

98. How does Spring Boot support REST API versioning?

Spring Boot doesn’t have built-in versioning, but you can easily implement
it in your controller layer.

Via:

URL versioning: /api/v1/users

Header versioning: X-API-VERSION: 1

Media type versioning: Accept: application/[Link].v1+json

99. What is the purpose of the @InitBinder annotation in Spring Boot?

@InitBinder is used to customize how Spring binds HTTP request data to


Java objects.

Example use cases:


Date formatting

String trimming

Custom type converters

@InitBinder

public void initBinder(WebDataBinder binder) {

[Link]([Link], new CustomDateEditor(

new SimpleDateFormat("yyyy-MM-dd"), false));

}s

Define two DataSource beans

Create two EntityManagerFactory beans

Configure separate TransactionManagers

Use @Primary and @Qualifier to differentiate

Best practice: Keep configs in separate @Configuration classes (e.g.,


PrimaryDBConfig, SecondaryDBConfig).

You might also like