您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SpringBootJNDI数据源抛出java.lang.ClassNotFoundException:org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory

SpringBootJNDI数据源抛出java.lang.ClassNotFoundException:org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory

我通过factory在我的Resource定义中设置属性解决了这个问题。resource.setProperty("factory", "org.apache.tomcat.jdbc.pool.DataSourceFactory");

@Bean
public TomcatEmbeddedServletContainerFactory embeddedServletContainerFactory(){
    return new TomcatEmbeddedServletContainerFactory() {

        @Override
        protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
                Tomcat tomcat) {
            tomcat.enableNaming();
            return super.getTomcatEmbeddedServletContainer(tomcat);
        }

        @Override
        protected void postProcessContext(Context context) {
            ContextResource resource = new ContextResource();
            resource.setName("jdbc/myDataSource");
            resource.setType(DataSource.class.getName());
            resource.setProperty("factory", "org.apache.tomcat.jdbc.pool.DataSourceFactory");
            resource.setProperty("driverClassName", "com.ibm.db2.jcc.DB2Driver");
            resource.setProperty("url", "url");
            resource.setProperty("username", "user");
            resource.setProperty("password", "*****");
            context.getNamingResources().addResource(resource);
        }
    };
}

根据tomcat 8文档,应该通过查看DataSourcetype 自动推断db pool factory类型,并且以某种方式将其认为DBCP factory,并且该类不在我的类路径中。

我想可以通过使tomcat-dbcp-**jars可用来解决问题,但是我不确定如何使用Spring Boot进行操作,即使使用Spring Boot也可以做到这一点。

我觉得奇怪的是,Spring Boot没有将tomcat-dbcp依赖项作为启动程序POM的一部分,而是使用DBCP DataSource工厂作为认工厂。

java 2022/1/1 18:14:43 有505人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶