我们最近将项目改为更加模块化。
我们使用selenium和jbrowserdriver从页面上爬取数据。
我们使用Spring Boot和Tomcat。
以前,我们有一个单独的war文件,其中包含所有的类文件,并将其部署到Tomcat中。我们使用jbrowserdriver和wire日志来捕获会话期间的头信息,效果很好。
然而,现在我们已经分离出一些功能,似乎在Tomcat中出现了不同的类加载器问题。
我们的系统布局如下:
我们使用selenium和jbrowserdriver从页面上爬取数据。
我们使用Spring Boot和Tomcat。
以前,我们有一个单独的war文件,其中包含所有的类文件,并将其部署到Tomcat中。我们使用jbrowserdriver和wire日志来捕获会话期间的头信息,效果很好。
然而,现在我们已经分离出一些功能,似乎在Tomcat中出现了不同的类加载器问题。
我们的系统布局如下:
/companyDir
+ -- /libs
| + -- core.jar
| + -- /widgets
| | + -- widgetA.jar
| | + -- widgetB.jar
Tomcat被配置为在其shared.loader属性中包括/libs/*.jar和/libs/widgets/*.jar这些jar文件。这些jar文件在tomcat启动时被包含。
然后,我们部署一个名为project.war的文件,其中包含Spring依赖项和控制器端点。
然而,现在当我们调用端点并且端点执行widgetA.jar时,wire日志完全为空。我们看到wire日志出现在catalina.out中,但调用driver.manage().logs().get("wire")
却为空。我不确定如何配置此项,以使我们显然得到的wire日志填充我们webdriver中的内部日志。
我可能只是对类加载器问题感到模糊,因为那似乎是问题所在。
LogsServer.java
执行updateSettings()
将org.apache.commons.logging.Log
重定向/重新路由到com.machinepublishers.jbrowserdriver.WireLog
时,这并没有像所有类从同一类加载器中执行时那样起作用。由于jbrowserdriver使用RMI进行执行,我有点难以理解这通常是如何工作的,尽管它仍然似乎与classLoaders相关的问题。 - zeusalmighty