如何使用Java配置在Tomcat 8中配置JNDI DataSource:

时间:2015-10-05 20:14:14

标签: java spring jndi

如何在Java配置文件中配置JNDI数据源,而不是在“web.xml”Servlet上下文中跟随代码片段:

<resource-ref>
   <description>DB Connection</description>
   <res-ref-name>jdbc/DatabaseName</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

3 个答案:

答案 0 :(得分:8)

注意:不要忘记将“mysql-connector-java-5.1.36.jar”复制到主安装文件夹中的Tomcat的“lib”子文件夹中。

首先:在“pom.xml”文件中添加以下依赖项:

 <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.36</version>
 </dependency>

第二:在“webapp”根文件夹中创建META-INF文件夹和“context.xml”文件如下图所示:

enter image description here

第三步:在“context.xml”文件中添加以下代码片段:

<?xml version='1.0' encoding='utf-8'?>

<Context>
    <Resource name="jdbc/DatabaseName" auth="Container" type="javax.sql.DataSource"
              maxActive="50" maxIdle="30" maxWait="10000"
              username="DatabaseUsername" password="DatabasePasssword"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/DatabaseName"/>
</Context>

第四:在Spring Context配置文件中创建以下Bean:

@Bean
public DataSource dataSource() {
    JndiDataSourceLookup dataSource = new JndiDataSourceLookup();
    dataSource.setResourceRef(true);
    return dataSource.getDataSource("jdbc/DatabaseName");
}

注意:“jdbc / DatabaseName”是我们在“context.xml”文件中已经添加的“name”属性。

答案 1 :(得分:1)

要完成SMG回答:对于xml配置的Spring,我使用以下代码(请注意“webapp”配置文件,对于单元测试,您需要具有独立于Web服务器的数据源)

<beans profile="webapp">
    <!-- get dataSources from web-container -->
    <bean name="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
        <property name="jndiName" value="java:comp/env/jdbc/DatabaseName" />
        <property name="resourceRef" value="true" />
    </bean>
</beans>

答案 2 :(得分:0)

可以通过3个步骤完成:

第1步:

在tomcat conf / server.xml中的 GlobalNamingResources 标记下添加以下条目。

  <Resource auth="Container" driverClassName="DB_Drive_class-name" maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/MyJNDI" password="&&&&&&&&&&&&&" type="javax.sql.DataSource" url="jdbc:db2://URL:PORT/DBNAME" username="&&&&&&&&&"/>

第2步:

context 根标记下的tomcat conf / context.xml中添加以下条目。

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

第3步:

web.xml

中添加数据源引用
<resource-ref>
 <description>DB2 Datasource</description>
 <res-ref-name>jdbc/MyJNDI</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>

注意:这是全局Tomcat配置,并且可以与其他应用程序共享数据源。