服务器之家

服务器之家 > 正文

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

时间:2021-08-21 16:34     来源/作者:华小灼

  以下是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

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部