我在配置 jdbc-pool 时遇到了一些 tomcat 7 问题:我尝试按照这个例子操作:http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency
所以我有:
conf/server.xml
<GlobalNamingResources>
<Resource type="javax.sql.DataSource"
name="jdbc/DB"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
username="user"
password="password"
/>
</GlobalNamingResources>
conf/context.xml
<Context>
<ResourceLink type="javax.sql.DataSource"
name="jdbc/LocalDB"
global="jdbc/DB"
/>
<Context>
当我尝试这样做时:
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource datasource = (DataSource)envContext.lookup("jdbc/LocalDB");
Connection con = datasource.getConnection();
我一直收到这个错误:
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
at org.apache.naming.NamingContext.lookup(NamingContext.java:803)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
请帮忙,谢谢
答案1
检查您的 context.xml 文件。您是否将其嵌入到现有的默认文件<Context>
中?<Context>
最坏的情况是这样的:
<ResourceLink type="javax.sql.DataSource"
name="jdbc/LocalDB"
global="jdbc/DB"
/>
...并确保它在已经存在的<Context>
标签内,并删除多余的标签。
一般来说,我从不建议为了创建这些资源而编辑 server.xml 或 context.xml。Tomcat 文档在某种程度上支持我的观点:
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html
请参阅简介部分的末尾。通常,我会在 /conf/Catalina/localhost 目录中创建 context.xml.default 文件甚至 appname.xml 文件,以达到此目的。从应用程序特定配置中抽象出全局配置。
答案2
通常,为了此目的,我会在 /conf/Catalina/localhost 目录中创建 context.xml.default 文件甚至 appname.xml 文件。
这是正确的方式。
答案3
您可以通过 java:comp/env/jdbc/DB 在一行中进行查找,不需要两次查找。