将Apache Derby作为Windows服务运行

3

我在我们的项目中使用Apache Derby。每次,我都必须手动启动derby服务器,即运行startnetworkserver.bat文件。是否可以将其安装为Windows Web服务?我还想将该服务添加到Windows启动列表中。这样每次我启动系统时,它都会自动启动。因此,我不必手动启动服务器。 我正在使用Apache Tomcat作为Windows服务。我希望对Derby执行相同的操作。

5个回答

6
请看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

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

哦,而且它是免费的!;-)


3
我曾遇到同样的问题,尝试使用各种工具和包装器将Derby作为Windows服务启动,其中包括Derby Wiki中提到的所有方法(http://wiki.apache.org/db-derby/DerbyWindowsService)。
无论如何,除了Apache基金会提供的procrun工具以外,这些工具都没有对我起作用。在Tomcat中,procrun工具用于将此服务器作为Windows服务器启动。因此,请按照以下步骤进行操作:
  1. 获取procrun的两个关键文件(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文件夹的上一级文件夹(..)中执行,并使用便携式32位Java版本。

    • 注意:我将其拆分为不同的行,但必须在一行中执行

    Derby\bin\derby.exe //IS//DerbyService
    --DisplayName="Derby Service"
    --Description="This is a Derby databse server"
    --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

建议:你可以像我一样将所有内容放在批处理文件中,其中你可以预先定义JAVA_HOME或任何其他需要的变量。

1

请查看JavaServiceWrapper,它是一个广泛使用、文档完备的包装器,可以将Java程序作为Windows服务运行。


0
看一下winsw,这是Glassfish使用的。需要.NET。

Glassfish是一个相当大的Java项目。 - Thorbjørn Ravn Andersen

0

原问题已经很久了,但是我想确认一下,我是否按照@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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接