问题描述
环境:Tomcat 10.0.2,WEB-INF/lib中的MysqL驱动8.0.23,jdk 15,最新版本的远程MysqL数据库
我正在尝试将使用传统 jdbc DriverManager.getConnection(JDBC_URL,JDBC_USERNAME,JDBC_PASSWORD) 连接方法的旧 java 类迁移到数据源。我的 meta-inf/context.xml 有以下内容:
NULL
web.xml:
<Resource name="jdbc/powerdns"
auth="Container"
type="javax.sql.DataSource"
username="pdns"
password="xxx"
driverClassName="com.MysqL.jdbc.Driver"
url="jdbc:MysqL:/x.x.x.x:3306/powerdns"
maxTotal="100"
axIdle="30"
maxWaitMillis="10000"/>
类方法:
<resource-ref>
<description>MysqL JDBC DataSource</description>
<res-ref-name>jdbc/powerdns</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
返回这个结果: java.sql.sqlException: 无法创建 PoolableConnectionFactory(通信链接失败上次成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。)
但是,在我在同一个类中的旧方法中,这仍然有效(JDBC_URL、JDBC_USERNAME 和 JDBC_PASSWORD 定义在类的顶部):
String id = "";
try {
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/powerdns");
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select name from powerdns.domains where name = 'localnet'");
if (rs.next()) id = rs.getString("name");
} catch(NamingException e){
id = e.toString();
} catch (sqlException e) {
id = e.toString();
} finally{
return id;
}
所以我在同一个应用服务器和同一个类上使用同一个驱动程序,连接(或在数据源情况下不连接)到同一个 MysqL 数据库。我应该添加调试猜测,在我的 context.xml 中,我已经编码了实际的 IP 和密码。
我被限制只能使用我的应用程序的 war 文件来做我需要的任何事情。换句话说,我无法更改 server.xml 或将库放入 tomcat 的 lib 目录中。 (系统管理员规则)
这个错误是我收到限制在我的 webapp/war 目录中还是我在我的代码中做错了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)