gpt4 book ai didi

java - Tomcat 8.5 - 无法在 ServletContextListener 的 contextInitialized 方法中访问 mysql JDBC 资源

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:33 24 4
gpt4 key购买 nike

我的 Web 应用程序有一个像这样的 servlet 监听器:

@WebListener
public class MyContextListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent e)
{
...
con = DatasourceProvider.getDatasource("java:comp/env/jdbc/mysql/mydb").getConnection();
...
}
}

我的资源定义没问题,在 tomcat 7 上运行良好,但是当我升级到 tomcat 服务器 8.5 时,它在启动时抛出异常:

javax.naming.NameNotFoundException: Name [jdbc/mysql/mydb] is not bound in this Context. Unable to find [jdbc].
at org.apache.naming.NamingContext.lookup(NamingContext.java:816)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.NamingContext.lookup(NamingContext.java:827)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.NamingContext.lookup(NamingContext.java:827)
at org.apache.naming.NamingContext.lookup(NamingContext.java:173)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
...

无论如何,我可以在服务器启动后(在其他 servlet 中)使用相同的代码毫无问题地获得 mysql 连接。那么问题来了,是什么原因导致tomcat启动时出现这个错误呢?

更新
这是我的虚拟主机配置:

<Host name="my-domain.ir" appBase="/var/www/webapp" >
<Context path="" docBase="MyWebApp"
xmlValidation="false" xmlNamespaceAware="false" crossContext="false" reloadable="false" >
<Resource name="jdbc/mysql/mydb" auth="Container" type="javax.sql.DataSource"

initialSize="1" maxTotal="100" maxIdle="2"
maxWaitMillis="20000" removeAbandonedOnMaintenance="true" removeAbandonedTimeout="300"
validationQuery="select now();"

username="myUser" password="myPass" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8&amp;connectionCollation=UTF8_PERSIAN_CI&amp;noAccessToProcedureBodies=true"
/>
</Context>
</Host>

最佳答案

我遇到了和您类似的问题,为此我在 Tomcat 的 context.xml 中添加了一行(与此类似)来解决该问题。

<ResourceLink global="jdbc/mysql/mydb" name="jdbc/mysql" type="javax.sql.DataSource"/>

以下是指向类似解决方案的问题的链接

Question-1

Question-2

Question-3

希望有帮助!!!

关于java - Tomcat 8.5 - 无法在 ServletContextListener 的 contextInitialized 方法中访问 mysql JDBC 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com