【问题标题】:Run Apache Derby as windows service将 Apache Derby 作为 Windows 服务运行
【发布时间】:2012-06-03 15:25:22
【问题描述】:

我在我们的项目中使用 apache derby。每次,我都必须手动启动 derby 服务器,即运行 startnetworkserver.bat 。是否可以将其安装为 Windows Web 服务?而且我还想在 Windows 启动列表中添加该服务。这样我每次启动系统都会自动启动。所以,我不必手动启动服务器。 我正在使用 apache tomcat 作为 Windows 服务。我想为德比做同样的事情。

【问题讨论】:

    标签: java windows-services derby


    【解决方案1】:

    看看Apache Procrun。它是一个 Windows 可执行文件,允许您将 java 程序作为 Windows 服务安装/卸载。

    服务的安装如下(来自项目站点):

    prunsrv //IS//TestService --DisplayName="Test Service" \
        --Install=prunsrv.exe --Jvm=auto --StartMode=jvm --StopMode=jvm \
        --StartClass=org.apache.SomeStartClass --StartParams=arg1;arg2;arg3 \
        --StopClass=org.apache.SomeStopClass --StopParams=arg1#arg2
    

    之后,您只需使用以下命令启动/停止服务:

    net start TestService
    net stop TestService
    

    或使用“我的电脑”中的“服务”视图。

    哦,它是免费的! ;-)

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,并尝试使用各种工具和包装器将 Derby 作为 Windows 服务,其中包括 Derby wiki (http://wiki.apache.org/db-derby/DerbyWindowsService) 中描述的所有方式。

      无论如何,除了 Appache Foundation 提供的 procrun 工具之外,这些工具都没有对我有用,它在 tomcat 中用于将此服务器作为 Windows 服务器。所以,接下来的步骤:

      1. 获取procrun的两个key文件(http://commons.apache.org/proper/commons-daemon/binaries.html):
        • prunsrv.exe - 将应用程序作为服务运行的服务应用程序。
        • prunmgr.exe - 用于监控和配置已安装服务的 GUI 管理器应用程序。
      2. 将这些文件复制到 Derby/bin(假设您有一个名为 Derby 的文件夹,即 DERBY_HOME)。
      3. 要遵循 procrun 约定,请将这些文件重命名为 derby.exe 和 derbyw.exe。如果您想使用不同的名称,您可以,但您应该修改随附的脚本。
      4. 要在 Windows 上创建服务,您必须执行下一个脚本。它被编写为在 Derby 文件夹的上级文件夹 (..) 上执行,并使用 java 32 位的可移植版本。

        • 注意:我已将其拆分为不同的行,但它只能在一行中执行

        Derby\bin\derby.exe //IS//DerbyService
        --DisplayName="德比服务"
        --Description="这是一个 Derby 数据库服务器"
        --Install="%cd%\Derby\bin\derby.exe" --Startup=auto
        --JavaHome "%cd%\Java_32_portable"
        --Jvm="%cd%\Java_32_portable\bin\client\jvm.dll"
        --StartMode=Java --StopMode=Java
        --StartClass=org.apache.derby.drda.NetworkServerControl --StartParams=start
        --StopClass=org.apache.derby.drda.NetworkServerControl --StopParams=shutdown
        --Classpath="%cd%\Derby\lib\derby.jar;%cd%\Derby\lib\derbyrun.jar;%cd%\Derby\lib\derbynet.jar;%cd%\Derby\lib\derbytools .jar"
        ++JvmOptions="-Dderby.system.home=%cd%\Derby;-Dderby.install.url=%cd%\Derby\lib;-Dderby.authentication.provider=BUILTIN;-Dderby.storage. pageCacheSize=8000;-Dderby.storage.pageSize=20000;-Dderby.database.sqlAuthorization=false"

      5. 重要。您应该调整粗体部分。

        • 适当设置您的 JAVA_HOME 变量和 jvm.dll
        • 在 ++JvmOptions 中设置您自己的 Derby 特定参数,用“;”分隔。例如,使用以下命令添加用户密码验证:
          -Dderby.database.sqlAuthorization=true;-Dderby.user."user-name"=password
      6. 最后,您可以检查您的服务是否正常启动

        net start DerbyService

      建议:您可以像我一样将所有内容放在一个 bat 文件中,您可以在其中定义先前的 JAVA_HOME 或任何其他必要的变量。

      【讨论】:

        【解决方案3】:

        查看JavaServiceWrapper,它是一个广泛使用且文档齐全的包装器,可让 Java 程序作为 Windows 服务运行。

        【讨论】:

          【解决方案4】:

          查看 Glassfish 使用的 winsw。需要 .NET。

          【讨论】:

          • Glassfish 是一个相当大的 Java 项目。
          【解决方案5】:

          自从最初的问题以来已经有很长时间了,无论如何我想确认我使用@Richard P 提供的说明在我的 Windows 64 位中正确设置了 Derby 服务。我的脚本完成略有不同,如下所示:

          set JAVA_HOME=C:\java\jdk1.8.0_25
          set DERBY_INSTALL=C:\tools\db-derby-10.13.1.1-bin
          
          %DERBY_INSTALL%\bin\derby.exe //IS//DerbyService --DisplayName="My Derby Service" --Description="My Derby Database Engine Service" --Install="%DERBY_INSTALL%\bin\derby.exe" --Startup=auto --JavaHome "%JAVA_HOME%" --Jvm="%JAVA_HOME%\bin\client\jvm.dll" --StartMode=Java --StopMode=Java --StartClass=org.apache.derby.drda.NetworkServerControl --StartParams=start --StopClass=org.apache.derby.drda.NetworkServerControl --StopParams=shutdown --Classpath="%DERBY_INSTALL%\lib\derby.jar;%DERBY_INSTALL%\lib\derbyrun.jar;%DERBY_INSTALL%\lib\derbynet.jar;%DERBY_INSTALL%\lib\derbytools.jar" ++JvmOptions="-Dderby.system.home=%DERBY_INSTALL%;-Dderby.install.url=%DERBY_INSTALL%\lib;-Dderby.authentication.provider=BUILTIN;-Dderby.storage.pageCacheSize=8000;-Dderby.storage.pageSize=20000;-Dderby.database.sqlAuthorization=false"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-30
            • 1970-01-01
            • 2020-08-19
            相关资源
            最近更新 更多