服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - 详解SpringBoot通用配置文件(不定时更新)

详解SpringBoot通用配置文件(不定时更新)

2021-08-21 16:34华小灼 Java教程

这篇文章主要介绍了SpringBoot通用配置文件详解(不定时更新),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  以下是SpringBoot项目中的常用配置类、jar包坐标等通用配置

pom文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
   <!-- -->
       <!-- 自定义配置文件提示 -->
       <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
       </dependency>
       <!-- Redis启动器 -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-redis</artifactId>
       </dependency>
<!-- SpringSession解决session共享问题-->
<dependency>
 <groupId>org.springframework.session</groupId>
 <artifactId>spring-session-data-redis</artifactId>
</dependency>
       <!-- RabbitMQ启动器 -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-amqp</artifactId>
       </dependency>
       <!-- 热部署启动器 -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 <optional>true</optional>
</dependency>
       <!-- thymeleaf模板引擎 -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- hutool工具包 -->
       <dependency>
 <groupId>cn.hutool</groupId>
 <artifactId>hutool-all</artifactId>
 <version>5.5.9</version>
</dependency>
<!-- 阿里巴巴Fastjson工具包 -->
<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.75</version>
</dependency>
<!-- 注解校验启动器 -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- mybatis启动器 -->
       <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
       </dependency>
<!-- mybatis-plus启动器 -->
<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-boot-starter</artifactId>
 <version>3.4.2</version>
</dependency>
<!-- MySQL驱动包 -->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>8.0.23</version>
</dependency>
<!-- Nacos 服务注册发现 -->
<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 配置中心 -->
<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

常用配置类

Feign远程调用拦截器配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Configuration
public class FeignConfig {
 @Bean
 public RequestInterceptor requestInterceptor() {
 return new RequestInterceptor() {
  /**
  * 调用远程方法之前先调用此方法
  */
  @Override
  public void apply(RequestTemplate requestTemplate) {
  //Spring提供的工具,获取当前请求的属性,
  ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  //获取当前请求对象
  HttpServletRequest request = requestAttributes.getRequest();
  //同步请求头信息
  requestTemplate.header("Cookie", request.getHeader("Cookie"));
  }
 };
 }
}

 常用方法

分布式中进行线程数据共享-----ThreadLocal
  例如:在分布式服务中,进行登录后怎样将当前登录的用户在当前微服务中,可以通过ThreadLocal类型进行共享

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 示例,前后端分离环境
/**
 * 在连接器中进行拦截验证
 */
public class MyInterceptor implements HandlerInterceptor{
    public static ThreadLocal<User> loginUser = new ThreadLocal<>();
     @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 获取系统颁发的token
        String token = request.getHeader("token");
        // TODO 在认证服务中心通过token去认证当前是否有账户登录及其登录的状态
        User user = feign.validUser(token);
        //将用户信息保存到本地线程中
        loginUser.set(user);
    }
}
 
/**
 * 测试demo
 */
public class TestDemo{
    public void test(){
        // 从本地线程中获取保存的变量
        User user = MyInterceptor.loginUser.get();
        // TODO 使用user进行业务
    }
}

Feign同步调用时丢失请求头信息—添加拦截器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Configuration
public class FeignConfig {
 @Bean
 public RequestInterceptor requestInterceptor() {
 return new RequestInterceptor() {
  /**
  * 调用远程方法之前先调用此方法
  */
  @Override
  public void apply(RequestTemplate requestTemplate) {
  //Spring提供的工具,获取当前请求的属性,
  ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  //获取当前请求对象
  HttpServletRequest request = requestAttributes.getRequest();
  //同步请求头信息
  requestTemplate.header("Cookie", request.getHeader("Cookie"));
  }
 };
 }
}

Feign异步调用时丢失上下文

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void testDemo() throws ExecutionException, InterruptedException {
 // 主线程请求的上下文信息
 RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
 CompletableFuture<Void> task1 = CompletableFuture.runAsync(() -> {
 //设置上下文信息
 RequestContextHolder.setRequestAttributes(requestAttributes);
 //TODO 执行远程调用
 }, executor);
 CompletableFuture<Void> task2 = CompletableFuture.runAsync(() -> {
 //设置上下文信息
 RequestContextHolder.setRequestAttributes(requestAttributes);
 //TODO 执行远程调用
 }, executor);
 CompletableFuture.allOf(task1, task2).get();
}
 
// TODO feign的拦截器代码不用改

到此这篇关于详解SpringBoot通用配置文件(不定时更新)的文章就介绍到这了,更多相关SpringBoot配置文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_45481406/article/details/114441230

延伸 · 阅读

精彩推荐