SpringBoot项目引用Jar内keystore.jks失败,抛出FileNotFoundException
解决SpringBoot中Jar包内keystore.jks文件无法识别的问题
嘿,这个问题我之前部署SpringBoot项目时也踩过坑!核心原因是你用了文件系统路径去引用Jar包内部的资源——打包成Jar后,src/main/resources这个物理路径根本不存在,资源是嵌入在Jar文件里的,不是独立的文件系统文件。
下面给你几个靠谱的解决办法:
1. 最推荐:使用类路径引用(通用所有场景)
直接修改application.properties里的配置,把路径改成类路径格式:
server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=mypassword server.ssl.key-store-type=JKS # 补全你之前没写完的证书类型,比如常见的JKS
SpringBoot会自动从类路径(src/main/resources目录下的文件打包后会被放到Jar的根类路径下)加载这个文件,不管你是在IDE里运行,还是打包成Jar部署,都能正常识别。
2. 备选:将keystore放在Jar外部(适合动态替换证书的场景)
如果你的证书需要频繁替换,不想每次都重新打包Jar,可以把keystore.jks放到和Jar文件同目录下,然后配置相对路径:
server.ssl.key-store=./keystore.jks # 其他配置保持不变
这样运行Jar时,程序会从当前工作目录加载这个文件。
额外注意事项
- 确认
keystore.jks确实在src/main/resources目录下,并且构建工具(Maven/Gradle)没有排除这个文件——默认情况下,Maven会自动打包src/main/resources下的所有文件,除非你在pom.xml里手动做了排除配置。 - 配置项尽量遵循官方规范:SpringBoot推荐用连字符分隔的格式(比如
server.ssl.key-store-type),虽然驼峰格式(keyStoreType)可能也能生效,但规范写法能避免不必要的兼容性问题。
内容的提问来源于stack exchange,提问作者Erent
相关产品推荐
相关产品推荐

