前言
最近想着把大火的deepseek 迁移到小程序里,基于刷题小程序的数据库做一个RAG应用,来进一步扩展答案解析,帮助用户解答相关问题。但是由于之前做的项目都要老了,并不支持spring 的AI模块,因此,我打算先升级一下系统。
一、升级JDK 1.8 到 JDK 17
1、首先从官网上下载一个JDK17的包,windows系统可能有这两种包(压缩包和安装包)

直接下载压缩包,放在一个中文目录下,然后修改环境变量。

然后看一下java版本 java --version 是否修改成功。

修改项目中的设置 如下
二、升级Springboot 2.x 到 Springboot 3.x
修改pom文件
XML
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/>
</parent>
XML
<properties>
<java.version>17</java.version>
</properties>
这里面需要注意的东西还挺多的
1、javax.servlet.*相关的类找不到,需要切换依赖为jakarta.servlet。修改
javax.servlet.*为jakarta.servlet.*。
XML
<!--jakarta.servlet start -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
<!--jakarta.servlet end -->
2.、mybatis-plus-boot-starter
XML
<!-- mybatis-plus start-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.5</version>
</dependency>
<!-- mybatis-plus end-->
3、redis
bash
spring.data.redis.host=127.0.0.1
#Redis服务器连接端口
spring.data.redis.port=6379
#连接池最大连接数(使用负值表示没有限制)
spring.data.redis.lettuce.pool.max-active=20
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.data.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.data.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.data.redis.lettuce.pool.min-idle=0
#连接超时时间(毫秒)
spring.data.redis.timeout=1800000
4、commons-pool2
Spring Boot 的
spring-boot-starter-data-redis
依赖了Lettuce
作为 Redis 客户端。
Lettuce
依赖于commons-pool2
来实现连接池功能。
因此我们也需要更新一下commons-pool2的版本。
XML
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
4、Spring-Security
咋WebSecurityConfig显示的注册authenticationManager为一个Bean
java
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
return config.getAuthenticationManager();
}
使用SecurityFilterChain替代WebSecurityConfigurerAdapter;
java
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http,
CustomizeAuthenticationEntryPoint customizeAuthenticationEntryPoint,
CustomizeAccessDeniedHandler customizeAccessDeniedHandler) throws Exception {
http
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
)
.authenticationProvider(thirdLoginAuthenticationProvider)
.authorizeHttpRequests(authorize -> authorize
.requestMatchers(
"/swagger-resources/configuration/ui",
"/swagger-resources",
"/swagger-resources/configuration/security",
"/swagger-ui.html",
).permitAll()
.anyRequest().authenticated()
)
.exceptionHandling(exception -> exception
.accessDeniedHandler(customizeAccessDeniedHandler)
.authenticationEntryPoint(customizeAuthenticationEntryPoint)
)
.cors(cors -> cors.configure(http))
.csrf(csrf -> csrf.disable());
return http.build();
}
Spring-Security 6.x的版本中,对于session的管理也发生了一些变化,需要手动将 SecurityContext 保存到 HttpSession 中。
java
HttpSession session = request.getSession();
session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());
修改到这里位置,就可以启动项目了。