无法从上下文获取有效的数据源正在获取连接url“null”异常的“”

8mmmxcuj  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(374)

在数据源上尝试获取连接时出现异常:无法创建的jdbc驱动程序
连接url“null”上下文的类“”

web.xml
    </context-param>
    <resource-ref>
        <res-ref-name>jdbc/shop_MYSQL</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

Pom
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
            <version>8.0.20</version>
        </dependency>

       code:
        Context ctx = new InitialContext();
        ds  = (DataSource) ctx.lookup("java:comp/env/jdbc/shop_MYSQL");
        Connection conn = ds.getConnection();
mbyulnm0

mbyulnm01#

您需要将mysql连接器jar添加到tomcat中,因为它不是现成的。从这里下载(适用于mysql的相应版本)
https://dev.mysql.com/downloads/connector/j
解压下载的zip并将mysql-connector-java-x.x..jar复制到tomcat lib文件夹(而不是web-inf/lib)
如果还没有,请在tomcat conf/context.xml中将数据源定义为资源

<Resource name="jdbc/shop_MYSQL" auth="Container" type="javax.sql.DataSource"
                   maxActive="100" maxIdle="30" maxWait="10000"
                   username="user" password="password" driverClassName="com.mysql.jdbc.Driver"
                   url="jdbc:mysql://localhost:3306/javatest"/>

java代码应该按原样工作。但是,您没有使用您定义的资源引用。您是否需要这样做是有争议的-这是为了保持部署者/开发人员角色的分离,请参见此处-但是假设您需要这样做,您需要一个额外的行来创建java:/comp/env上下文并对其进行查找:

Context ctx = new InitialContext();
Context envCtx  = (Context) ctx.lookup("java:/comp/env");
ds  = (DataSource) envCtx.lookup("jdbc/shop_MYSQL");
Connection conn = ds.getConnection();

相关问题