从别人的样例工程改的一个小东东,用的框架是 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-java
和 libmariadb-java
,并且对 CLASSPATH
做了相应调整(前面安装的两个数据库访问驱动,均会被置于 /usr/share/java
路径之下),可是执行仍然会有异常导致中止,其相关信息显示似乎仍然与数据库访问有关。
在思索一段时间后,隐约出现了另一个可能。当前的情况是,在安装包内和安装包外各有一套配置,每套包含两个文件,即 application.properties
和 application-online.properties
,在前者里会有指向后者的设置。朴素的想象是,由于命令行中指定了前者,那么 Spring Boot 会在同路径下访问后者,既然发生了事实上的问题,那不妨做个测试。于是在命令行中重复使用 --spring.config.location=
参数也明确指定了 online 配置文件的路径,执行后发现服务运行正常了。
遗留的一个不确定的问题是,那两份数据库访问驱动,到底 Spring Boot 有没有使用、使用了哪一份,未有定论。