1. Spring Boot中的Actuator是什么?它的作用是什么?

解答: Actuator是Spring Boot提供的一个功能强大的监控和管理工具。它提供了许多内置的端点(endpoints),可以用于监控应用程序的健康状况、运行时信息等。通过Actuator,可以轻松地监控应用程序的性能、配置信息、日志等,并且可以通过HTTP接口或JMX与应用程序进行交互。

引入示例代码:

pom.xml中添加Actuator依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. Spring Boot的自动配置是如何工作的?

解答: Spring Boot的自动配置通过条件化配置来实现。当应用程序启动时,Spring Boot会根据classpath中的依赖和配置信息,以及运行时环境的特征(如操作系统、JVM版本等)来决定是否自动配置某些功能。如果符合条件,则自动配置类会被加载并配置相应的bean,从而简化了开发者的工作。

3. 如何实现Spring Boot应用程序中的AOP(面向切面编程)?

解答: 在Spring Boot应用程序中,可以使用@Aspect注解和@Before@After等注解来定义切面和通知。首先,需要创建一个切面类,并在其中定义切点和通知方法。然后,在配置类中使用@EnableAspectJAutoProxy注解启用AOP功能。

示例代码:

import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyAspect {

    @Pointcut("execution(* com.example.service.*.*(..))")
    private void anyServiceMethod() {}

    @Before("anyServiceMethod()")
    public void beforeServiceMethod() {
        System.out.println("Before executing service method");
    }

    @After("anyServiceMethod()")
    public void afterServiceMethod() {
        System.out.println("After executing service method");
    }
}

在配置类中添加@EnableAspectJAutoProxy注解:

【SpringBoot】【经典面试题】每天10个Java面试题-面试大厂起飞系列-day02-LMLPHP

import org.springframework.context.annotation.*;

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
    // 配置其他Bean
}

4. 如何实现Spring Boot应用程序中的事务管理?

解答: 在Spring Boot中,可以使用@Transactional注解来实现事务管理。只需在需要添加事务管理的方法上添加@Transactional注解即可,Spring Boot会自动处理事务的开始、提交、回滚等操作。

示例代码:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class MyService {

    @Transactional
    public void performTransaction() {
        // 执行数据库操作
    }
}

5. 如何使用Spring Boot实现异步任务?

解答: 在Spring Boot中,可以使用@Async注解来实现异步任务。只需在需要异步执行的方法上添加@Async注解,并在配置类中使用@EnableAsync注解启用异步功能。

示例代码:

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    @Async
    public void performAsyncTask() {
        // 执行异步任务
    }
}

在配置类中添加@EnableAsync注解:

import org.springframework.context.annotation.*;

@Configuration
@EnableAsync
public class AppConfig {
    // 配置其他Bean
}

6. 如何在Spring Boot应用程序中配置多数据源?

解答: 在Spring Boot中配置多数据源可以通过创建多个DataSource bean,并将它们分别配置到不同的数据源。然后,通过@Qualifier注解指定要使用的数据源。

示例代码:

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.core.JdbcTemplate;

@Configuration
public class DataSourceConfig {

    @Bean(name = "firstDataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.first")
    public DataSource firstDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.second")
    public DataSource secondDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "firstJdbcTemplate")
    public JdbcTemplate firstJdbcTemplate(@Qualifier("firstDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "secondJdbcTemplate")
    public JdbcTemplate secondJdbcTemplate(@Qualifier("secondDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

行走的程序喵精心为小伙伴们制作了一份《20万字Java面试八股文宝典》 👇👇👇

【SpringBoot】【经典面试题】每天10个Java面试题-面试大厂起飞系列-day02-LMLPHP

【SpringBoot】【经典面试题】每天10个Java面试题-面试大厂起飞系列-day02-LMLPHP

7. 如何在Spring Boot应用程序中实现请求参数校验?

解答: 在Spring Boot中可以使用javax.validation包提供的注解来实现请求参数校验。只需在Controller方法的参数上添加相应的校验注解,Spring Boot会自动进行参数校验,并返回校验结果。

示例代码:

import javax.validation.constraints.NotBlank;
import org.springframework.web.bind.annotation.*;

@RestController
public class MyController {

    @PostMapping("/validate")
    public String validateParam(@NotBlank(message = "Name is required") String name) {
        return "Valid param: " + name;
    }
}

8. 如何在Spring Boot应用程序中使用WebSocket?

解答: 在Spring Boot中,可以使用spring-boot-starter-websocket依赖来实现WebSocket。首先,需要创建一个WebSocket处理器类,并在配置类中注册它。然后,在客户端页面中使用JavaScript代码来连接WebSocket服务端。

示例代码:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.*;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/my-websocket

");
    }
}
import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        // 处理WebSocket消息
    }
}

9. 如何在Spring Boot应用程序中使用缓存?

解答: 在Spring Boot中,可以使用@EnableCaching注解启用缓存功能,并在需要缓存的方法上添加@Cacheable@CachePut@CacheEvict等注解来控制缓存的行为。

示例代码:

import org.springframework.cache.annotation.*;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    @Cacheable("dataCache")
    public String getData() {
        // 从数据库或其他数据源获取数据
        return "Data";
    }
}

在配置类中添加@EnableCaching注解:

import org.springframework.cache.annotation.*;
import org.springframework.context.annotation.*;

@Configuration
@EnableCaching
public class AppConfig {
    // 配置其他Bean
}

10. 如何在Spring Boot应用程序中集成JMS(Java Message Service)?

解答: 在Spring Boot中,可以使用spring-boot-starter-activemqspring-boot-starter-artemis依赖来集成JMS。然后,创建JMS的连接工厂、目的地以及消息发送和接收者,并通过@JmsListener注解来监听消息。

示例代码:

import org.springframework.jms.annotation.*;
import org.springframework.stereotype.Component;

@Component
public class MyJmsListener {

    @JmsListener(destination = "my-queue")
    public void receiveMessage(String message) {
        // 处理接收到的消息
    }
}

【SpringBoot】【经典面试题】每天10个Java面试题-面试大厂起飞系列-day02-LMLPHP

03-30 00:46