SpringBoot项目IDEA运行正常 打Jar包启动提示缺少ServletWebServerFactory错误
解决方案
根因说明
IDEA中bootRun命令默认启用dev配置文件,不存在配置错误因此启动正常;打包后的jar默认加载你配置的prod配置文件,prod配置存在多处语法、路径错误,导致Spring上下文初始化中断,最终抛出ServletWebServerFactory缺失的错误。
具体修复步骤
- 修复application.properties中的JPA配置语法错误
你当前将JPA命名策略的属性名拆分为两行,Spring无法识别该配置,需要合并为一行:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
- 修复application-prod.properties中数据库密码的ENC格式错误
当前数据库密码的加密值缺少ENC的闭合右括号,Jasypt无法正常解析加密参数,修改为:
spring.datasource.password=ENC(VJPGTDVqPqsBnnzKXOtj10sZ3/ui+Y38)
- 修复SSL证书路径配置
打包为jar包后不存在src/main/resources目录,资源文件统一存放在classpath下,修改证书路径:
server.ssl.key-store=classpath:leafyproject.p12
- 确认打包命令正确
使用SpringBoot官方提供的bootJar任务打包,生成的可执行jar会包含所有依赖:
gradle bootJar
生成的jar文件位于项目build/libs目录下。
- (生产环境建议优化)jasypt密钥通过启动参数传入
不要将加密密钥硬编码在配置文件中,启动jar时通过参数传入,同时删除配置文件中的jasypt.encryptor.password=Leaf23配置,避免密钥泄露:
java -jar 你的jar包名称.jar --jasypt.encryptor.password=Leaf23
内容的提问来源于stack exchange,提问作者devo9191
相关产品推荐
相关产品推荐

