Windows服务依赖项设置

背景

服务器:Windows Server 2008 R2

数据库:MySQL 8.0

缓存:Redis

API:Java 8,并且部署成Windows服务

前端:Vue,通过nginx,nginx也部署成Windows服务

 

问题

服务器重启后,API服务未运行,但是呢,手动启动又启动成功了

有点奇怪!

虽说不是什么大问题,但下次万一再重启又没启动起来,岂不是又要手动干预?

于是查了下日志,报这个错

ERROR: init datasource error
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:833)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:453)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156)
	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227)
	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150)
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1653)
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1717)
	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:914)

证明Java程序启动时连接数据库失败。

而手动启动又正常,于是破案了——Java服务先于MySQL服务启动了,数据库还没准备好Java程序就去连接了……

 

解决办法

设置Java程序的服务启动依赖关系

命令

sc config funds-center-server depend=MySQL80

其中“funds-center-server”是Java服务名称,“MySQL80”是数据库服务名称,以下图框出来的名称为准

设置成功后,即解决问题。

 

后记

还可以添加多个依赖项,命令也很简单,用“/”分开即可,如下所示:

sc config funds-center-server depend=MySQL80/Redis

 

posted on 2023-07-28 15:38  dysjwang  阅读(85)  评论(0编辑  收藏  举报

导航