Spring Boot 项目部署时的几个小问题

从别人的样例工程改的一个小东东,用的框架是 Spring Boot,在 Windows 本机测试——包括本地数据库访问这些——都正常,信心满满地上传到服务器上运行,结果并不顺利。

首先是 Java 运行时的缺失,这个通过执行 sudo apt install openjdk-8-jre-headless 解决了。

接下来是配置文件的问题。工程中的配置文件,application.properties 以及其几个区分环境的伴生配置文件,都被直接打包到了最后生成的 jar 文件中了,但是其中的配置跟实际服务器上的情况并不相符,修改工程重新编译,或者把 jar 打开后直接修改配置文件再重新打包可能是可行的,但实在太不专业。经过了解得知,可以在命令行上用 --spring.config.location= 参数选项来指定配置文件的路径。按此照办后,果然 server 开始初始化,然而又很快停止,报出如下错误:

...: Invocation of init method failed; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class

看上去是连接数据库的驱动缺失。根据网上的信息,先后用 apt 安装了 libmysql-javalibmariadb-java,并且对 CLASSPATH 做了相应调整(前面安装的两个数据库访问驱动,均会被置于 /usr/share/java 路径之下),可是执行仍然会有异常导致中止,其相关信息显示似乎仍然与数据库访问有关。

在思索一段时间后,隐约出现了另一个可能。当前的情况是,在安装包内和安装包外各有一套配置,每套包含两个文件,即 application.propertiesapplication-online.properties,在前者里会有指向后者的设置。朴素的想象是,由于命令行中指定了前者,那么 Spring Boot 会在同路径下访问后者,既然发生了事实上的问题,那不妨做个测试。于是在命令行中重复使用 --spring.config.location= 参数也明确指定了 online 配置文件的路径,执行后发现服务运行正常了。

遗留的一个不确定的问题是,那两份数据库访问驱动,到底 Spring Boot 有没有使用、使用了哪一份,未有定论。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注