You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:12:45