Tomcat8配置JNDI数据源
使用到的tomcat版本:apache-tomcat-8.0.15-windows-x64
首先我们先将数据库驱动(jar)包放到tomcat安装目录下的lib目录。
单个应用独享数据源
1.找到Tomcat的server.xml找到对应工程的Context节点(我这里要添加数据源的工程师ZTestWebProject),添加一个私有数据源
<Context docBase="ZTestWebProject" path="/ZTestWebProject" reloadable="true" source="org.eclipse.jst.jee.server:ZTestWebProject">
<Resource name="jdbc/app-adcpwsqlz3-aes-unicode" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="postgres" password="abc123" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/db_cepa" />
</Context>
配置全局JNDI数据源,应用根据情况自行选择
1.在tomcat的conf/context.xml中,在Context节点下添加数据源
<Resource name="jdbc/app-adcpwsqlz3-aes-unicode" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="postgres" password="abc123" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/db_cepa" />
也可以将这个数据源配置在conf/server.xml中GlobalNamingResources节点下,作用是一样的
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
<!-- 配置数据源 -->
<Resource name="jdbc/app-adcpwsqlz3-aes-unicode" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="postgres" password="abc123" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/db_cepa" />
</GlobalNamingResources>
2.在应用的web.xml中对数据源进行引用(我这里是在ZTestWebProject下的web.xml)
<resource-ref>
<description>JNDI DataSource</description>
<res-ref-name>jdbc/app-adcpwsqlz3-aes-unicode</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
配置全局JNDI数据源,应用到所有应用
1.和【配置全局JNDI数据源,应用根据情况自行选择】的第一步是一样的
2.在tomcat的conf/context.xml中,在Context节点下加一个ResourceLink节点对第一步配置的数据源配置引用
<ResourceLink global="jdbc/app-adcpwsqlz3-aes-unicode" name="jdbc/app-adcpwsqlz3-aes-unicode" type="javax.sql.DataSource" />
加载数据源
代码中我们可以使用如下方式,对数据源进行引用
Context cxt=new InitialContext();
DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/app-adcpwsqlz3-aes-unicode");
Connection connection = ds.getConnection();
如果是Spring环境:
<!-- 方式一,需要引入jee命名空间 -->
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/app-adcpwsqlz3-aes-unicode"/>
<!-- 方式二 -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/app-adcpwsqlz3-aes-unicode</value>
</property>
</bean>