如何让Apache Windows服务守护进程(ProRun prunsrv)使用java库路径,以便Microsoft SQL集成安全身份验证能够工作
我有一个Java应用程序需要作为Windows服务运行。应用程序需要使用集成安全性连接到Microsoft SQL server。这意味着Java需要在Java库路径中具有驱动程序dll的位置 根据,可以使用以下参数传入JVM选项:如何让Apache Windows服务守护进程(ProRun prunsrv)使用java库路径,以便Microsoft SQL集成安全身份验证能够工作,java,service,jvm-arguments,integrated-security,procrun,Java,Service,Jvm Arguments,Integrated Security,Procrun,我有一个Java应用程序需要作为Windows服务运行。应用程序需要使用集成安全性连接到Microsoft SQL server。这意味着Java需要在Java库路径中具有驱动程序dll的位置 根据,可以使用以下参数传入JVM选项: ++JvmOptions="-Djava.library.path=drivers/MS SQL/x64" 上面的路径是针对我的案例的 当从命令行使用java.exe运行应用程序,并传入与上述相同的库路径(使用适当的java语法)时,它的工作方式与预期完全相同。但
++JvmOptions="-Djava.library.path=drivers/MS SQL/x64"
上面的路径是针对我的案例的
当从命令行使用java.exe运行应用程序,并传入与上述相同的库路径(使用适当的java语法)时,它的工作方式与预期完全相同。但是,当将应用程序作为服务运行时(在prunsrv中使用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”选项时相同。服务似乎没有按预期设置库路径
在查看文档后,有一个看起来很有希望的选项:
--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选项一起设置时,它仍然抛出与以前完全相同的异常。好像它没有应用这个设置。我发布这个答案是因为我发现很难找到关于这个特定用例的文档。我希望这篇文章能节省一些时间 事实证明,jvm模式的解决方案是使用--LibraryPath选项,但您不能在++JVMPoptions=“…”中包含相同的库路径,因为这样它似乎会破坏它,并且您会得到异常 总之
++JvmOptions="-Dfile.encoding=UTF8;-Xmx6g" --LibraryPath="%solutionRootPath%\bin\drivers\MS SQL\x64"
其中,上面的路径和环境变量特定于我的用例
执行此操作后,解决方案的工作原理与使用java.exe从命令行运行时相同