升级JDK17后的问题记录

906 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

升级JDK17后的问题记录

最近对开发环境和线上环境统一进行了JDK版本的升级,遇到了一些问题,记录如下。

1. 在连接sqlserver2005 时出现 tls版本问题

com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]". ClientConnectionId:e832074c-911f-4583-881d-f9d29bbbca40
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2707)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1837)

需要在disabledAlgorithms 中去掉TLSv1, TLSv1.1

#jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

修改后
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

文件地址参考

image.png

2. 反射问题

如果出现 does not "opens java.lang" to unnamed module 类似以下的错误

rg.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @27abe2cd at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:589)
``

在java vm参数列表中需要添加
```txt
--add-opens=java.base/java.lang=ALL-UNNAMED 
--add-opens=java.base/java.io=ALL-UNNAMED 
--add-opens=java.base/java.util=ALL-UNNAMED 
--add-opens=java.base/java.util.concurrent=ALL-UNNAMED 
--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

3. 如何解决全局环境传递问题

可以把 第二步配置的参数放到 JDK_JAVA_OPTIONS 参数中

设置一个全局的环境变量

image.png

指向以下文件内容

image.png

文件文本内容如下

--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/java.nio=ALL-UNNAMED
--add-opens java.base/java.security=ALL-UNNAMED
--add-opens java.base/java.text=ALL-UNNAMED
--add-opens java.base/java.time=ALL-UNNAMED
--add-opens java.desktop/java.awt.font=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.rmi/sun.rmi.transport=ALL-UNNAMED

这样在使用的时候就能加载这些配置了,注意红色画线部分

image.png