平面设计公司网站建设费用html网页作业
平面设计公司网站建设费用,html网页作业,长沙网站外包公司吗,辽源做网站的公司现象#xff1a;
1、使用 nohup java -jar … 命令行启动服务完全正常#xff0c;但配置 Supervisor 启动后#xff0c;服务运行几秒便自动退出。
2、查看日志发现报错#xff1a;com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed。…现象1、使用 nohup java -jar … 命令行启动服务完全正常但配置 Supervisor 启动后服务运行几秒便自动退出。2、查看日志发现报错com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed。环境MySQL 8.0 JDK 17 Ubuntu (ARM64) Supervisor。一、问题复现与环境1. 环境信息操作系统Ubuntu Server (ARM64 架构)数据库MySQL 8.0 (默认认证插件为 caching_sha2_password)运行方式Supervisor 守护进程JDK 版本OpenJDK 172. 异常日志Supervisor 管理的日志文件 (/data/javaweb/logs/media.log) 中频繁出现以下堆栈Caused by: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException:Failed to initialize pool: Public Key Retrieval is not allowed at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:596)at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:582)at com.zaxxer.hikari.pool.HikariPool.init(HikariPool.java:115)at com.zaxxer.hikari.HikariDataSource.init(HikariDataSource.java:81)com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed at com.mysql.cj.protocol.a.authentication.CachingSha2PasswordPlugin.nextAuthenticationStep(...)...3. 奇怪现象1服务正常运行连接数据库无误nohup/usr/local/jdk/bin/java-jarmedia.jar/dev/null212Supervisor 启动失败 配置好 .conf 文件后执行 supervisorctl start media状态显示 RUNNING但几秒钟后变为 STOPPED 或 FATAL日志报上述公钥错误。二、原因深度分析为什么同样的 Jar 包命令行能跑Supervisor 却报错核心原因在于 MySQL 8.0 的安全机制 与 进程启动环境的差异。1. MySQL 8.0 的认证机制变更1MySQL 8.0 默认将密码加密插件从 mysql_native_password 升级为 caching_sha2_password。2当客户端Java Driver连接时如果本地没有缓存服务器的公钥驱动需要向服务器请求公钥以加密密码。3安全默认值出于防止中间人攻击的考虑MySQL Connector/J 驱动默认配置 allowPublicKeyRetrievalfalse。即禁止自动获取公钥。2. 为什么命令行能成功这通常是由于隐式的环境差异导致的1配置文件覆盖可能在命令行启动时你无意中加载了外部的配置文件如 --spring.config.location…或者当前用户的环境变量中注入了特定的 JDBC URL 参数。2历史缓存如果是同一台机器之前的命令行连接可能已经建立了某种会话缓存较少见但在特定驱动版本下可能发生。3最可能的原因你的 application.properties 或 application.yml 中其实并没有配置完整的 JDBC URL而是依赖了某些默认值或环境变量。而在 Supervisor 模式下它作为一个纯净的守护进程不会加载用户的 .bashrc 或 .profile导致读取到的 JDBC URL 是“残缺”的缺少了关键参数从而触发了默认的 false 策略。3. 为什么 Supervisor 会报错Supervisor 启动的进程是一个标准的后台服务它严格读取 Jar 包内部或指定目录下的默认配置文件。由于配置文件中缺少 allowPublicKeyRetrievaltrue驱动严格遵守安全规范拒绝连接并抛出异常导致 Spring Boot 启动失败进程退出。三、解决方案要彻底解决此问题必须显式地在 JDBC 连接字符串中允许公钥检索。推荐两种方案方案一为最佳实践。方案一修改应用配置文件推荐直接修改项目中的数据库配置文件确保无论通过何种方式启动配置都是完整且一致的。如果是 application.properties找到 spring.datasource.url追加参数 allowPublicKeyRetrievaltrue 和 useSSLfalse除非你有明确的 SSL 证书需求否则开发/内网环境建议关闭 SSL 以减少握手问题。# 修改前spring.datasource.urljdbc:mysql://192.168.1.100:3306/mydb?serverTimezoneAsia/ShanghaicharacterEncodingutf-8# 修改后 (注意 符号连接)spring.datasource.urljdbc:mysql://192.168.1.100:3306/mydb?serverTimezoneAsia/ShanghaicharacterEncodingutf-8allowPublicKeyRetrievaltrueuseSSLfalsespring.datasource.usernamerootspring.datasource.passwordyourpassword2、如果是 application.ymlspring: datasource: url: jdbc:mysql://192.168.1.100:3306/mydb?serverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrueuseSSLfalse username: root password: yourpassword操作步骤1修改配置文件。2重新打包 Jar 或确保外部配置目录文件已更新。3重启 Supervisorsudosupervisorctl rereadsudosupervisorctl updatesudosupervisorctl restart media方案二在 Supervisor 配置中注入参数无需改代码1如果你无法修改配置文件或者希望针对生产环境和测试环境有不同的连接策略可以在 Supervisor 的 command 行中通过 Spring Boot 的参数覆盖机制注入。2编辑 /etc/supervisor/conf.d/media.conf[program:media]directory/data/javaweb# 关键点在命令末尾追加 --spring.datasource.url...# 注意URL 中包含 符号建议使用单引号包裹整个参数值防止 Shell 解析错误command/usr/local/jdk/bin/java-jarmedia.jar--spring.datasource.urljdbc:mysql://192.168.1.100:3306/mydb?serverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrueuseSSLfalseautostarttrueautorestarttruestartretries3userrootpriority100stopsignalINTredirect_stderrtruestdout_logfile/data/javaweb/logs/media.logstdout_logfile_maxbytes300MBstopasgroupfalsekillasgroupfalse重载配置sudosupervisorctl rereadsudosupervisorctl updatesudosupervisorctl restart media四、验证与监控配置完成后务必进行以下验证1.检查状态sudosupervisorctl status media# 期望输出media RUNNING pid 12345, uptime 0:05:102.查看实时日志tail-f/data/javaweb/logs/media.log3.模拟重启测试sudoreboot# 服务器重启后再次检查服务是否自动拉起sudosupervisorctl status五、总结与避坑指南1MySQL 8.0 特性只要升级到 MySQL 8.0务必在 JDBC URL 中显式添加 allowPublicKeyRetrievaltrue这是新版本的默认安全策略不是 Bug。2环境一致性不要依赖“命令行能跑”就认为配置没问题。Supervisor、Systemd、Docker 等守护进程的启动环境与交互式 Shell 不同它们通常不加载用户的环境变量。显式配置永远优于隐式依赖。3SSL 问题如果添加了 allowPublicKeyRetrievaltrue 后报 SSL 相关错误请同时加上 useSSLfalse。在生产环境如果需要 SSL请正确配置信任库而不是简单关闭。4ARM64 架构本文案例发生在 ARM64 服务器但该问题是 MySQL 驱动层面的与 CPU 架构无关x86_64 服务器同样会遇到。觉得有用请点赞收藏如果在部署过程中遇到其他 Supervisor 或 MySQL 问题欢迎在评论区留言交流。