Spring Boot Native集成jasypt-spring-boot启动报错求助
解决GraalVM原生镜像中Jasypt找不到Unicode归一化器的问题
针对Spring Boot 3.0.7 + Java 17 + GraalVM原生镜像构建时,jasypt-spring-boot 3.0.5启动报错找不到Normalizer的问题,提供以下解决思路:
1. 直接禁用Unicode归一化(推荐,因密码为ASCII)
由于你的加密密码仅包含ASCII字符,完全不需要Unicode归一化处理,可以通过配置直接跳过这一步,从根源避免加载Normalizer类:
在application.properties或application.yml中添加:
jasypt.encryptor.password-unicode-normalization-disabled=true
2. 确保Java自带Normalizer被正确包含(若需保留归一化)
2.1 修正反射配置文件路径
你当前Gradle中配置的反射文件路径../../../src/main/resources/reflect-config.json可能存在工作目录匹配问题,改为项目根目录相对路径:
buildArgs.add('-H:ReflectionConfigurationFiles=src/main/resources/reflect-config.json')
2.2 使用Spring Native注解替代手动JSON配置
相比手动维护反射配置文件,使用Spring Native的@NativeHint注解更可靠,能确保构建时正确识别需要保留的类:
import org.springframework.nativex.hint.NativeHint; import org.springframework.nativex.hint.TypeHint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @NativeHint( types = { @TypeHint(type = java.text.Normalizer.class, access = TypeHint.Access.ALL), @TypeHint(type = com.ibm.icu.text.Normalizer.class, access = TypeHint.Access.ALL) } ) @SpringBootApplication public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
3. 若需使用ICU4J归一化器(不推荐,Java17无需额外依赖)
如果确实需要兼容旧环境使用ICU4J的实现,需先添加依赖:
implementation 'com.ibm.icu:icu4j:73.2'
再通过上述反射配置或@NativeHint确保该类被包含在原生镜像中。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

