У меня есть приложение Java, которое должно запускаться как служба Windows. Приложению необходимо подключиться к серверу Microsoft SQL с помощью Integrated Security. Это означает, что Java должно иметь расположение DLL драйвера в пути библиотеки java.Как получить демоны службы Apache Windows (procrun prunsrv), чтобы использовать путь к библиотеке Java, так что может работать SQL Server Integrated Security Authentication
Согласно prunsrv documentation, можно передать параметры виртуальной машины Java, используя следующие параметры:
++JvmOptions="-Djava.library.path=drivers/MS SQL/x64"
где выше путь специфичен к моему делу.
При запуске приложения с использованием java.exe из командной строки и прохождения в том же пути библиотеки, что и выше (с соответствующим синтаксисом java), он работает точно так, как ожидалось. Однако, при запуске приложения в качестве службы (с использованием Jvm режима в prunsrv) дает следующее исключение и не связывает:
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 = водителей/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 она по-прежнему выбрасывает то же самое исключение, что и раньше. Это похоже на то, что он не применил настройку.