- 学习Spring Boot的要点有以下几个:
- 熟悉Spring Boot核心概念:控制反转(Inversion of Control)和依赖注入(Dependency Injection),这是Spring Boot的核心。
- 掌握Spring Boot的基本配置:了解如何配置Spring Boot应用的基本设置,例如数据源、缓存、日志等。
- 学习如何创建和使用Spring Boot应用:了解如何使用Spring Boot快速创建Web应用程序、RESTful服务、批处理应用等。
- 学习如何测试Spring Boot应用:了解如何使用JUnit、Mockito等测试工具来测试Spring Boot应用。
- 使用Spring Boot开发Web应用程序:学习如何使用Spring Boot框架处理HTTP请求、响应以及使用Spring Boot的WebMVC框架构建Web应用程序。
- 学习如何处理异常和错误:了解如何使用Spring Boot处理异常和错误,以便更加高效地调试应用程序。
- 学习如何使用Spring Boot构建复杂应用程序:了解如何使用Spring Boot配合其他Spring框架构建复杂应用程序,例如使用Spring Security构建安全应用、使用Spring Data构建大数据应用等。
- 学习SpringBoot的git项目整合使用。
- 学习Spring Boot,需要掌握以下一些常用的注解:
- @SpringBootApplication:用于标注Spring Boot应用程序的主类,表示这是一个Spring Boot应用程序启动类。
- @RestController:用于标注控制器类,表示该类中的所有方法都是Web API方法,会自动将返回值转换为Json格式。
- @RequestMapping:用于标注Web API的请求路径,可以定义请求的URL和HTTP请求方法。
- @Autowired:用于标注自动注入依赖对象,例如自动注入数据库连接池。
- @Repository:用于标注数据访问层(DAO)类。
- @Service:用于标注业务逻辑层(Service)类。
- @Controller:用于标注Web应用程序的控制器类。
- @Configuration:用于标注配置类,表示这是一个Spring配置类。
- @Value:用于将配置文件中的值注入到对应的属性中。
- @ComponentScan:用于指定要扫描的组件包。
- @RestControllerAdvice:用于定义全局异常处理和全局数据绑定。
- @ResponseBody:用于标注方法返回值是HTTP响应体,可以将方法的返回值转换为JSON格式。
- @RequestBody:用于标注HTTP请求体,自动将请求体转换为Java对象。
- @Transactional:用于事务处理,可以将标注的方法体自动加入到事务中。
- @Validated:用于参数校验,配合@NotBlank、@NotNull等注解进行参数校验。
- 学习Spring Boot MVC要领如下:
- 熟悉Spring Boot和Spring MVC概念。Spring Boot是基于Spring框架的快速开发框架,而Spring MVC则是其中一个Web MVC框架,因此学习Spring Boot MVC前需要先掌握基础的Spring Boot和Spring MVC概念。
- 学会创建Spring Boot MVC项目。可以使用Spring Initializr或者Spring Boot CLI等工具初始化一个Spring Boot项目,添加Spring Web和Thymeleaf等依赖,创建必要的配置文件和类。
- 掌握Spring MVC的核心概念。在学习Spring Boot MVC之前需要了解Spring MVC的核心概念,包括控制器、视图解析器、拦截器、注解等。
- 学习Spring Boot MVC的注解和配置。Spring Boot提供了许多注解和配置可以快速简便地创建一个Web应用程序,如@RestController、@RequestMapping、@PathVariable、@RequestParam等,同时也可以通过application.properties或application.yml等文件进行配置。
- 理解Spring Boot MVC的数据传递。Spring Boot MVC支持多种方式实现将数据从控制器传递到视图,如ModelAndView、Model、Map、@ModelAttribute等,需要根据具体情况选择合适的方式。
- 掌握Spring Boot MVC的测试方法。可以使用MockMvc或者TestRestTemplate等工具对Spring Boot MVC进行测试,确保应用程序的各个功能都能正常运行。
- 学习Spring Boot MVC的扩展功能。Spring Boot MVC支持集成Spring Security、Spring Data等组件,可以通过学习这些组件的使用来扩展Web应用程序的功能。
- 跨域是指客户端请求服务器时,请求的目标资源与客户端所在的源(协议、域名、端口)不匹配的情况。通常情况下,不同源的客户端之间是无法直接互相访问数据的,这是浏览器的安全策略所限制的。在Spring Boot中,实现跨域请求有很多种方式。其中比较常用的有以下几种:
- 使用CORS(跨域资源共享)机制,Spring Boot提供了@CrossOrigin注解来支持CORS,可以在Controller类或者对应的方法上标注这个注解来实现跨域请求。
例如,在Controller类上标注@CrossOrigin注解:
@RestController
@CrossOrigin(origins = "*", maxAge = 3600) // 接受所有域名的请求,允许缓存3600秒
public class HelloWorldController {
@RequestMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
- 使用拦截器(Interceptor)来实现跨域请求。可以通过编写自定义的拦截器来处理CORS头信息,Spring Boot提供了一个WebMvcConfigurer接口用于配置WebMvcConfigurer扩展。
例如,在WebMvcConfigurer类中增加addInterceptors方法来配置跨域请求:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CorsInterceptor()).addPathPatterns("/**");
}
}
- 使用Filter来处理跨域请求。可以通过编写Filter实现对跨域请求进行处理。
例如,在Filter中处理跨域请求:
@Component
public class CorsFilter implements Filter {
@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "content-type");
chain.doFilter(req, res);
}
}
- 在Spring Boot中,可以通过统一异常处理机制来方便地管理和处理系统中的异常信息。在实际开发中,统一处理系统异常可以提升用户体验和系统可靠性,减少调试和维护难度。下面介绍一种实现方式:
- 定义自定义异常类,一般继承RuntimeException或其子类。例如:
public class BusinessException extends RuntimeException {
private String code;
private String message;
public BusinessException(String message) {
super(message);
this.message = message;
}
public BusinessException(String code, String message) {
super(message);
this.code = code;
this.message = message;
}
// getter and setter
}
- 定义全局异常处理器。一般使用@ControllerAdvice注解来定义一个异常处理器类,并使用@ExceptionHandler注解定义要处理的异常类型和对应的处理方法。例如:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
@ResponseBody
public Result<Object> handleBusinessException(BusinessException ex) {
Result<Object> result = new Result<>();
result.setCode(ex.getCode());
result.setMsg(ex.getMessage());
return result;
}
@ExceptionHandler(Exception.class)
@ResponseBody
public Result<Object> handleException(Exception ex) {
Result<Object> result = new Result<>();
result.setCode("9999");
result.setMsg(ex.getMessage());
return result;
}
}
- 使用@ResponseBody将处理结果序列化为JSON字符串。在GlobalExceptionHandler类中,使用@ResponseBody将处理结果序列化为JSON字符串后返回给客户端,这样客户端可以方便地获取处理结果并展示到页面上。
- 将异常拦截器添加到Spring Boot应用程序。可以通过在Spring Boot的启动类中添加@Bean注解来将GlobalExceptionHandler注册为异常拦截器,例如:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public GlobalExceptionHandler globalExceptionHandler() {
return new GlobalExceptionHandler();
}
}
- Spring Boot 提供了日志和定时任务的集成,方便开发人员对应用程序进行调试和监控。下面分别介绍一下 Spring Boot 的日志和定时任务:
日志
Spring Boot 集成了常见的日志框架,可以使用 Logback、Log4j2 或者 JDK Logging 等日志框架来记录日志信息。Spring Boot 提供了一个统一的日志接口 - SLF4J(Simple Logging Facade for Java),可以让开发者使用统一的 API 记录日志。
日志配置
在 Spring Boot 中,日志配置文件默认是 application.properties
或 application.yml
,可以修改其中的配置参数来控制日志级别、控制台输出、日志文件等等。
以下是一个简单的日志配置文件 application.properties
:
# 设置日志输出级别为TRACE(跟踪)级别
logging.level.com.example = TRACE
# 控制台输出带有颜色
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
# 控制台输出不显示颜色
#logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
# 日志文件输出
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
logging.file.name=myapp.log
# 每天生成一个新的日志文件
logging.file.max-history=30
logging.file.max-size=10MB
上述配置文件设置了日志输出级别、控制台输出、文件输出等。
日志使用
使用 Spring Boot 日志非常容易,只需要在代码中引入 org.slf4j.Logger 接口,然后使用该接口进行日志记录即可,例如:
@RestController
public class HelloWorldController {
private static final Logger LOGGER = LoggerFactory.getLogger(HelloWorldController.class);
@RequestMapping("/hello")
public String hello() {
LOGGER.debug("Hello, Debug!");
LOGGER.info("Hello, Info!");
LOGGER.warn("Hello, Warn!");
LOGGER.error("Hello, Error!");
return "Hello, World!";
}
}
定时任务
Spring Boot 基于 Spring Framework 提供了方便的定时任务集成功能。在 Spring Boot 中,只需要在方法上添加 @Scheduled 注解就可以将该方法定义为定时任务。
定时任务配置
在 Spring Boot 中,可以使用 @Scheduled 注解来定义定时任务,该注解有以下主要属性:
- fixedRate:定义了间隔时间,单位毫秒,默认值为 0,表示无间隔时间。
- fixedDelay:定义了延迟时间,单位毫秒,默认值为 0,表示无延迟。
- initialDelay:定义了任务在启动后第一次执行的延迟时间,单位毫秒,默认值为 0。
- cron:使用 cron 表达式定义任务执行的时间。若同时配置了fixedRate/fixedDelay和cron,则以 fixedRate/fixedDelay 为准。
例如:
@Component
public class ScheduledTask {
// 每隔 5 秒执行一次任务
@Scheduled(fixedRate = 5000)
public void doSomething() {
System.out.println("doSomething() invoked!");
}
}
上述代码创建了一个定时任务 doSomething()
,每隔 5 秒执行一次。
定时任务使用
在 Spring Boot 应用程序中使用定时任务非常简单,只需要在需要定时执行的方法上添加 @Scheduled 注解即可。例如:
@Service
public class MyTaskService {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 每隔 1 分钟执行一次任务
@Scheduled(cron = "0 * * * * ?")
public void reportCurrentTime() {
System.out.println("现在时间是:" + dateFormat.format(new Date()));
}
}