使用内嵌Tomcat启动web项目,报了错误
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
原因是使用了JNDI数据源。
解决:
启用tomcat的JNDI;即调用 tomcat.enableNaming();
Tomcat tomcat = new Tomcat();
...
tomcat.enableNaming();
...
tomcat.start();
tomcat.getServer().await();
代码:
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
<Resource name="jndi_name" auth="Container" type="javax.sql.DataSource" maxActive="20" maxIdle="10"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/testdb" username="root" password="root"/>
</Context>
获取JNDI数据源
DataSource ds = InitialContext.doLookup("java:comp/env/jndi_name");
Connection conn = ds.getConnection();
Properties props = conn.getClientInfo();
System.out.println(props.toString());