Java EE带有Eclipse和Tomcat:找不到驾驶员



我正在从事一个Java EE项目(以下配置),我面对似乎是常规的例外: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

我正在使用Eclipse,一个嵌入式的Tomcat 7和Maven,即使找到了测试驾驶员,也找不到Tomcat。

我搜索了一些答案1、2和3,但建议尚不清楚:建议将mysql-connector-java更改为provided,然后手动复制服务器中的依赖关系(不清楚)。

但是我不明白为什么我应该排除部署的依赖性(范围provided)并手动添加,不是矛盾吗?

阅读了Maven文档后,我觉得运行环境需要依赖性,因此compile范围最适合。

您可以看到我试图弄清楚这些东西,所以我宁愿有解释而不是魔术修复。

配置:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.26</version>
</dependency>

数据库属性:

  • URL = jdbc:mysql://127.0.0.1:3306/XXX-db?zeroDateTimeBehavior=convertToNull
  • USERBD = XXX
  • PASSWORDBD = XXX
  • DRIVER = com.mysql.jdbc.Driver

属性加载:

static {
    try {
        Properties databaseProperties = new Properties();
        InputStream inputStream = DatabaseConnection.class.getClassLoader()
                .getResourceAsStream(PROPERTIES_FILE);
        if (inputStream != null) {
            databaseProperties.load(inputStream);
        } else {
            throw new FileNotFoundException(
                    "property file '" + PROPERTIES_FILE + "' not found in the classpath");
        }
        Class.forName(databaseProperties.getProperty("DRIVER"));
        USERBD = databaseProperties.getProperty("USERBD");
        PASSWORDBD = databaseProperties.getProperty("PASSWORDBD");
        URL = databaseProperties.getProperty("URL");
    } catch (ClassNotFoundException | IOException e) {
        e.printStackTrace();
    }
}

tomcat 7 jndi文档给您答案:将它们放在tomcat/lib文件夹中。

Apache随附的JRE内存泄漏预防侦听器 Tomcat通过在Tomcat期间触发驾驶员扫描来解决此问题 启动。默认情况下启用了这一点。这意味着只有图书馆 听众可见,例如$ catalina_base/lib中的听众 扫描数据库驱动程序。如果您正在考虑禁用此 功能,请注意,扫描将由第一个网络触发 使用JDBC的应用程序,导致此Web时失败 应用程序已重新加载,并适用于其他依赖的Web应用程序 此功能。

因此,在其中具有数据库驱动程序的Web应用程序 Web-Inf/lib目录不能依靠服务提供商机制 并应明确注册驱动程序。

相关内容

  • 没有找到相关文章

最新更新