我有一个需要作为 Windows 服务运行的 Java 应用程序。应用程序需要使用集成安全连接到 Microsoft SQL 服务器。这意味着Java需要在java库路径中有驱动dll的位置。
根据prunsrv 文档,可以使用以下参数传入 JVM 选项:
++JvmOptions="-Djava.library.path=drivers/MS SQL/x64"
上面的路径特定于我的情况。
当从命令行使用 java.exe 运行应用程序并传入与上面相同的库路径(使用适当的 java 语法)时,它完全按预期工作。但是,当将应用程序作为服务运行时(在 prusrv 中使用 jvm 模式),它会出现以下异常并且无法连接:
com.microsoft.sqlserver.jdbc.SQLServerException:
This driver is not configured for integrated authentication. com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)
...
Caused by: java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865)
...
例外情况与从控制台应用程序中省略“-Djava.library.path=drivers/MS SQL/x64”选项时的情况相同。该服务似乎没有按预期设置库路径。
在查看prunsrv的文档后,有一个看起来很有希望的选项:
--LibraryPath : Directory added to the search path used to locate the DLLs for the JVM. This directory is added both in front of the PATH environment variable and as a parameter to the SetDLLDirectory function.
这正是我想要的。
可悲的是,当将此选项与 java.library.path jvm 选项一起设置时,它仍然会引发与以前完全相同的异常。就好像它没有应用设置一样。