And*_*dna 11 java mysql tomcat servlets jdbc
我正在尝试使用tomcat建立与mysql数据库的连接池.我的简单应用程序叫做Projekt,在我的Apache/conf/Catalina/localhost的Projekt.xml中
<Context docBase="Projekt.war" path="/Projekt">
<Resource name="jdbc/mysqldb"
auth="Container"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/Music"
username="andrzej"
password="qazxsw"
maxActive="20"
maxIdle="30"
maxWait="5"
/>
</Context>
Run Code Online (Sandbox Code Playgroud)
我的应用程序的web.xml
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>org.jtp.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/Hai</url-pattern>
</servlet-mapping>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysqldb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)
在我的Apache/lib文件夹中
mysql-connector-java-5.1.18-bin.jar
Run Code Online (Sandbox Code Playgroud)
但是当我执行这段代码时:
Context initContext = new InitialContext();
dataSource = (DataSource)initContext.lookup("java:comp/env/jdbc/mysqldb");
System.out.println(dataSource.getConnection().createStatement().
execute("select * from Users"));
Run Code Online (Sandbox Code Playgroud)
我得到例外
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
Run Code Online (Sandbox Code Playgroud)
我现在很困惑,在某些地方我读到它可能是由于没有将驱动程序放在tomcat/lib中引起的,但我有它并且它有效,因为当我用手动连接测试驱动程序时它起作用了.
对于我的设置,我试图关注 http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html
编辑:最后让它工作,似乎我在其中一个文件中有一些左上下文标记,所以在解析时它覆盖了其他属性,所以这是我最后的错.
Bas*_*que 16
要使用Tomcat实现JDBC连接池,可以使用XML配置文件的替代方法.我从来没有能够使这些Context和resource-ref标签工作.此外,如果您不真正需要JNDI功能,那些标签就太过分了.
另一种方法是使用Java代码配置 Tomcat的JDBC连接池.请参阅Tomcat 7文档页面,Tomcat JDBC连接池的Plain Ol'Java部分中的示例代码.
基本上,你:
十分简单.像这样…
PoolProperties p = new PoolProperties();
p.setUrl( jdbc:postgresql://localhost:5432/" + "my_database_name" );
p.setDriverClassName( "org.postgresql.Driver" );
p.setUsername( "someUserName" );
p.setPassword( "somePassword" );
…
DataSource datasource = new org.apache.tomcat.jdbc.pool.DataSource( p );
datasource.setPoolProperties(p);
Run Code Online (Sandbox Code Playgroud)
要使用数据源......
Connection conn = null;
try {
conn = datasource.getConnection();
…
Run Code Online (Sandbox Code Playgroud)
可以存储DataSource实例:
ServletContext使用内置的映射String到Object,如在描述我的一个回答关于这个问题所讨论如何获取和设置的Java servlet上下文全局对象.小智 12
看起来你缺少Context envCtx = (Context) initCtx.lookup("java:comp/env");
JNDI查找应该这样做:
// Obtain our environment naming context
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
// Look up our data source
DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB");
// Allocate and use a connection from the pool
Connection conn = ds.getConnection();
Run Code Online (Sandbox Code Playgroud)
来自http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html的文档.
| 归档时间: |
|
| 查看次数: |
31785 次 |
| 最近记录: |