You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SpringBoot 2.2.6-RELEASE与jasypt-spring-boot-starter 3.0.2兼容问题求助

问题分析与解决方案

我刚帮你排查了这个问题,核心原因是外部Tomcat部署场景下,Jasypt 3.0.2与Spring Boot 2.2.6.RELEASE版本不兼容,再加上配置加载顺序问题,导致加密的数据源配置还没被解密,Spring就尝试初始化数据源,最终抛出"无法确定合适的驱动类"的错误——这其实是表象,本质是数据源的URL/用户名/密码未被正确解析。

下面是具体的解决步骤:

1. 降级Jasypt版本适配Spring Boot 2.2.x

Jasypt 3.0.x系列是为Spring Boot 3.x设计的,和Spring Boot 2.x存在兼容性问题。你需要把jasypt-spring-boot-starter的版本替换为2.1.x,这个版本完美适配Spring Boot 2.2.x:

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version> <!-- 替换为这个版本 -->
</dependency>

2. 确保bootstrap.yml在外部Tomcat中被加载

外部Tomcat部署时,Spring Boot默认不会自动加载bootstrap.yml,而你把Jasypt的加密密钥配置在这个文件里,会导致解密逻辑无法获取密钥。解决方法二选一:

  • 方案A:把Jasypt的配置从bootstrap.yml移到application-common.yml中,这样Spring启动时能正常读取到加密密钥:
    # application-common.yml中添加
    jasypt:
      encryptor:
        password: alvin@20200418
        algorithm: PBEWithMD5AndDES
    
  • 方案B:保留bootstrap.yml,但确保spring-cloud-context依赖版本和Spring Boot匹配(你的2.2.2.RELEASE是对的),同时在启动类上添加@EnableConfigurable注解,强制加载bootstrap配置。

3. 重新生成加密的用户名/密码

因为Jasypt 2.x和3.x的加密逻辑有差异,你之前用3.0.2生成的加密串在2.1.2版本下无法正确解密。请用2.1.2版本的Jasypt重新生成加密内容:

# 下载jasypt-2.1.2.jar后执行命令
java -cp jasypt-2.1.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="你的数据库用户名" password=alvin@20200418 algorithm=PBEWithMD5AndDES
java -cp jasypt-2.1.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="你的数据库密码" password=alvin@20200418 algorithm=PBEWithMD5AndDES

把生成的新加密串替换掉application-dev.yml里的ENC(...)内容。

4. 可选:通过Tomcat启动参数传递加密密钥(更安全)

为了避免把密钥写在配置文件里,你可以通过Tomcat的启动参数传递Jasypt密钥:

  • Windows环境:修改Tomcat/bin/catalina.bat,添加一行:
    set JAVA_OPTS=%JAVA_OPTS% -Djasypt.encryptor.password=alvin@20200418
    
  • Linux环境:修改Tomcat/bin/catalina.sh,添加一行:
    export JAVA_OPTS="$JAVA_OPTS -Djasypt.encryptor.password=alvin@20200418"
    
    这样就可以把配置文件里的jasypt.encryptor.password删掉了。

验证步骤

  1. 执行mvn clean package重新打包war包
  2. 替换Tomcat/webapps下的旧war包
  3. 启动Tomcat,查看日志是否正常初始化数据源

内容的提问来源于stack exchange,提问作者AlvinYueChao

火山引擎 最新活动