首页 > 其他分享 >jasypt的版本问题:从2.0升级为3.0版本会发生报错:Failed to bind properties under ‘spring.datasource.password……

jasypt的版本问题:从2.0升级为3.0版本会发生报错:Failed to bind properties under ‘spring.datasource.password……

时间:2024-10-20 11:48:28浏览次数:3  
标签:配置 配置文件 Spring 绑定 BindException 报错 版本 password 属性

目录

1. 详细的报错信息

2. 解决方案

3. 那为什么这样解决呢?

4. 补充BindException异常

4.1 什么是属性绑定?

4.2 为什么会出现BindException?

4.3 BindException的常见场景

4.4 如何解决BindException?


        由于昨晚写完一篇关于SpringBoot集成jasypt对敏感信息进行加密的文章后,又踩到坑啦。今天就急忙给大家分享出来:

1. 详细的报错信息

Description:

Failed to bind properties under 'spring.datasource.password' to java.lang.String:

    Reason: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.datasource.password' to java.lang.String

Action:

Update your application's configuration

这个错误信息表明Spring Boot在尝试将配置文件中的spring.datasource.password属性绑定到一个java.lang.String类型的字段时失败了。这种情况的话应该就是解密失败了。程序解密不出一个完整的字符串。

2. 解决方案

  • 将版本从3.x降到2.x;
  • 在配置文件中指定加密算法:
    jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator
    jasypt.encryptor.algorithm=PBEWithMD5AndDES

3. 那为什么这样解决呢?

        这是因为官方在3.x版本以后就更改了加密算法,所以如果你不设置的话,使用它3.x版本中默认的加密算法(也就是昨晚的文章中提到的:PBEWITHHMACSHA512ANDAES_256),就会报错,这个报错的讲解在上一篇文章内可以找到哈。同样2.x和3.x版本的区别就在这里了。

4. 补充BindException异常

        本篇文章中的异常类型属于BindException,那么我们来补充一下这个内容,BindException是Spring框架抛出的一个异常,它表明在绑定属性值到配置目标对象时出现了问题。这种异常通常发生在Spring Boot应用程序的上下文中,特别是当使用外部配置(如来自application.propertiesapplication.yml文件的配置)来设置应用程序的属性时。

4.1 什么是属性绑定?

在Spring应用程序中,属性绑定是指将外部配置源(如配置文件、环境变量等)中的值映射到Spring管理的JavaBean属性上的过程。Spring使用一套复杂的绑定机制来实现这一点,这包括类型转换、集合处理、SPA(Spring Expression Language)表达式解析等。

4.2 为什么会出现BindException?

当Spring尝试将配置值绑定到Java对象的属性上,但无法完成这一过程时,就会抛出BindException。这可能由以下原因引起:

  1. 类型不匹配:配置值的类型与目标属性的类型不匹配,且无法自动转换。
  2. 格式错误:配置值的格式不正确,例如,一个数字类型的属性被赋予了一个非数字的字符串。
  3. 缺少属性:配置中缺少了必需的属性值。
  4. 复杂的对象结构:当配置需要绑定到一个复杂对象或嵌套对象时,如果配置结构不正确或不完整,也可能导致绑定失败。
  5. 自定义验证失败:如果配置属性被注解为需要特定的验证(如@Valid@NotNull),而验证未通过,也会引发此异常。

4.3 BindException的常见场景

  • 数据库配置错误:如前所述,数据库密码(spring.datasource.password)配置错误是一个常见的场景。
  • 不合规的配置格式:例如,配置文件中的YAML格式不正确,导致Spring无法解析配置。
  • 环境特定的配置问题:在不同的部署环境中,配置属性可能需要特定的格式或值,如果这些要求没有被满足,也可能导致绑定异常。

4.4 如何解决BindException?

解决BindException通常涉及以下步骤:

  1. 检查配置文件:确保配置文件中的属性名正确,且所有必需的属性都已提供。
  2. 验证属性类型和格式:确保配置文件中的值与目标Java属性的类型兼容,并且格式正确。
  3. 查看错误信息BindException通常会提供详细的错误信息,包括失败的属性路径和原因。仔细阅读这些信息可以帮助定位问题。
  4. 使用Spring的诊断功能:运行应用程序时加上--debug-trace参数可以提供更详细的日志输出,有助于诊断问题。
  5. 单元测试:编写单元测试来验证配置属性的绑定是否按预期工作。

标签:配置,配置文件,Spring,绑定,BindException,报错,版本,password,属性
From: https://blog.csdn.net/apple_64847327/article/details/143088809

相关文章

  • 一文彻底弄懂MySQL的MVCC多版本控制器
    InnoDB的MVCC(Multi-VersionConcurrencyControl,多版本并发控制)是MySQL实现高并发事务处理的一种机制。通过MVCC,InnoDB可以在高并发环境下支持事务隔离,并提供非阻塞的读操作,从而避免锁定所有读操作带来的性能瓶颈。MVCC允许事务在不加锁的情况下读取数据,保证了性能和一......
  • MIB search path: /root/.snmp/mibs:/root/snmpd/share/snmp/mibs Cannot find module
    这个问题通常出现在使用SNMP(简单网络管理协议)时,系统无法找到SNMPv2-MIB模块。以下是解决这个问题的步骤:1.确认MIB文件存在首先,确保SNMPv2-MIB文件存在于指定的路径中:/root/.snmp/mibs:/root/snmpd/share/snmp/mibs你可以检查这些目录中是否存在SNMPv2-MIB文件:ls/roo......
  • jar包运行报错1.无主属性清单 2.外部Jar包未导入 3.Data Source url报错解决 4.端口占
    相信大家mvnpackage打包成jar包后放到服务器上面运行后遇到一些很头疼的问题,怎么按照百度、gpt、csdn上面的博客修改就是成功不了但是!今天!博主带着自己尝试多次的血泪经验为大家解答以上三大问题!接下来以“代码+解析”的方式解析大家的问题一、无主属性问题报错如下图这......
  • PostgreSQL免安装版本
    下载压缩包官网地址:https://www.enterprisedb.com/download-postgresql-binaries解压并新建data文件夹进入pgsql文件夹,新建data文件夹cmd进入pgsql/bin目录,初始化数据库,并设置数据库密码初始化命令:initdb.exe-DF:\pgsql\data-EUTF-8--locale=chs-Uroot-W......
  • 使用Flyway进行数据库版本控制
    1.flyway介绍Flyway是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理和自动化数据库结构的变更。它可以跟踪和管理数据库的版本控制,并在应用程序启动时自动执行升级或回滚操作。在项目或产品中,很难一开始就把业务理清楚、......
  • flume传输数据报错“Space for commit to queue couldn‘t be acquired. Sinks are li
        最近在写一个数据量比较大的项目时候,需要使用flume将kafka中的数据传输到HDFS上进行存储,方便后续的数仓搭建,但是flume在传输数据中却报错如下日志org.apache.flume.ChannelFullException:Spaceforcommittoqueuecouldn'tbeacquired.Sinksarelikelynot......
  • 启动service报错ORA-44317: database open read-only
    ADG(RAC)备库环境,srvctl添加service服务成功,启动service时报错ORA-44317:databaseopenread-only。这是预期行为,使用“srvctladdservice-d<db_name>-s<service_name>”创建服务时,将在OCR中创建和注册服务,但在使用“srvctlstartservice-d<db_name>-s<service_n......
  • nvm 一个node.js版本管理工具
    nvm是什么nvm全英文也叫node.jsversionmanagement,是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。下载地址:https://github.com/coreybutler/nvm-windows/releases一、nvm命令......
  • 《地狱已满2》游戏报错lpk.dll文件丢失怎么办?玩家必看《地狱已满2》遭遇lpk.dll丢失故
    对于热爱《地狱已满2》这款游戏的玩家来说,遇到“lpk.dll文件丢失”的报错信息无疑是一个巨大的困扰。这个错误通常意味着你的系统中缺失或损坏了lpk.dll这个动态链接库(DLL)文件,它是Windows系统的一部分,用于支持某些音频和多媒体功能。游戏运行时可能依赖这个文件,缺乏它会导致游......
  • P4343 [SHOI2015] 自动刷题机(最详细版本 通俗易懂)
    题目背景曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机——一种可以自动AC题目的神秘装置。题目描述自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序。每秒,自动刷题机的代码生成模块会有两种可能的结果:1.写了 x 行代码2......