SpringBoot 常见配置注解使用:

2024-08-06 14:09:34 浏览数 (2)

SpringBoot 配置注解解析

会不断更新! 一起学习呀!

application.yml 常见配置:

server

server.servlet.context-path 应用上下文路径

server.context-path 它代表的是应用上下文根

代码语言:javascript复制
server.servlet.context-path=/wsm
  • 例如我在 application.properties / yml
  • 中配置了 server.servlet.context-path=/wsm那么我访问**该模块**服务端资源请求的时候就必须加上 /wsm
举例:
代码语言:javascript复制
@RestController
//@RequestMapping("/ww")   
public class SpringbootErrorController {
    @RequestMapping("/hello")
    public void error01() {
        System.out.println("hello world");
    }
}

例如:

你要访问到这个 Controller 中的 /hello 映射,那么你浏览器发起的请求就要是 http://localhost:8080/wsm/hello

取消注释则: http://localhost:8080/wsm/ww/hello

常见场景:

可以配合 Nginx 使用!

代码语言:javascript复制
upstream task{
    server 100.100.88.152:8097;
    check interval=30000 rise=2 fall=3 timeout=1000 type=http;
    check_http_send "GET /market/task/turnTask  HTTP/1.0rnrn";
    check_http_expect_alive http_2xx http_3xx;
}
server {
    location /market/task/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://task;
    }
}

上述Nginx 配置:

  • 所有的请求中如果url中包含/market/task/的请求,都被分发到server 100.100.88.152:8097 ip和端口的服务器上
  • 如果task模块配置了server.servlet.context-path= /market/task 那么task模块下的所有web接口url地址都必须加上 /market/task
  • 那么在task模块下的web层所有接口都可以分发到server 100.100.88.152:8097上
  • 不用考虑新增的Controller类上的路径和接口上定义的路径.

反之:

  • 如果没有配置server.servlet.context-path,或者server.servlet.context-path配置的没有区别性, 那么ngnix就没有办法分发出去。
  • 这样模块下web层每次新增一个Controller类,为了能够让ngnix正常分发,不报404错误,需要在ngnix上对类的url地址进行配置,这是一件很麻烦的事情。
server.servlet-path 拦截路径

server.servlet-path 它代表的是 DispatcherServlet 的拦截路径

代码语言:javascript复制
server.servlet-path=/wsm
  • DispatcherServlet 拦截路径就是 /wsm 即只有 /wsm 的请求可以通过! 其它请求都拦截!!
  • 但是我们配置 DispatcherServlet 都是使用默认的路径 / (拦截所有请求,不拦截 jsp) 貌似已经淘汰了!

spring

spring.profiles.active 解决多个生成环境 profiles 问题



SpringBoot 常见注解:

@validated

解释 @validated 之前,先要了解 @valid

  • @valid 是Java种对数据校验的注解,配合JSR303 实现前后端交互 了解 随着,前后端分离JSP的没落,Spring表单,也不在使用,但 JSR303 后台数据校验还是很流行的
  • @validated Spring 是针对Java开发的一个整合框架!,可以理解是对 @valid 的一个增强,是Spring使用**JSR303**的注解!
  • 在检验Controller的入参是否符合规范时 使用@Validated或者@Valid在基本验证功能上没有太多区别。但是在分组、注解地方、嵌套验证等功能上两个有所不同:
@Valid和@Validated 区别

@Valid

  • 是Java的注解 可以用在方法、构造函数、方法参数和成员属性(字段)上 @Valid可以实现嵌套验证,**@Validated没有需要使用@Valid 实现!**

@Validated

  • 是Spring的注解 可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上 比@Valid 多了分组的功能!

都是对JSR303 数据校验的使用,本质上没啥区别~ 学习使用

@ControllerAdvice

@ExceptionHandler

Spring 常用注解:

面试题:

server.servlet-path 和 server.servlet.context-path 区别:

server.context-path设定应用的context-path

  • 这个项目前缀,比如说配置成/Demo,那么访问路径就是ip:端口/Demo,没有配置的情况下是ip:端口/

server.servlet-path设定dispatcher servlet的监听路径,默认为: /

  • 这个的意思是哪些访问路径需要被spring的dispatcher servlet处理,而你配置成/Demo的意思就是,只有/Demo才需要被它处理

0 人点赞