`

Tomcat中使用jndi连接数据源

    博客分类:
  • java
阅读更多

因为开发的时候系统是用proxool来实现数据库连接的,而生产环境是用was的所以采用jndi的方式连接。

为了每次上应用的时候不用去改配置数据库配置,所以把原因proxool改成了jndi的方式。

proxool的实现

     web.xml:

              <context-param>
                     <param-name>xmlFile</param-name>
                    <param-value>WEB-INF/conf/proxool/proxool.xml</param-value>
             </context-param>

             <listener>
                  <listener-class>
                          com.test.listener.ProxoolListener
              </listener-class>
           </listener>

   applicationContext.xml:

           <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName">
   <value>org.logicalcobwebs.proxool.ProxoolDriver</value>
  </property>
  <property name="url">
   <value>proxool.datasource1</value>
  </property>
 </bean>

 

    proxool.xml:

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
 <proxool>
  <alias>datasource1</alias>
  <driver-url>jdbc:oracle:thin:@192.168.2.137:1521:orcl</driver-url>
  <driver-class>oracle.jdbc.OracleDriver</driver-class>
  <driver-properties>
   <property name="user" value="test" />
   <property name="password" value="123456" />
  </driver-properties>
  <maximum-connection-count>5</maximum-connection-count>
  <minimum-connection-count>1</minimum-connection-count>
  <prototype-count>2</prototype-count>
  <house-keeping-sleep-time>90000</house-keeping-sleep-time>
  <house-keeping-test-sql>select SYSDATE FROM DUAL</house-keeping-test-sql>
  <statistics>1m,1h,1d</statistics>
  <statistics-log-level>ERROR</statistics-log-level>
 </proxool>
</something-else-entirely>

 

ProxoolListener类

public class ProxoolListener
  implements ServletContextListener
{
 private static final Logger LOG = LoggerFactory.getLogger(ProxoolListener.class);
 private static final String XML_FILE_PROPERTY = "xmlFile";
 private static final String PROPERTY_FILE_PROPERTY = "propertyFile";
  private static final String AUTO_SHUTDOWN_PROPERTY = "autoShutdown";
  private boolean autoShutdown;

  public ProxoolListener()
 {
    this.autoShutdown = true; }

  public void contextDestroyed(ServletContextEvent arg0) {
    if (this.autoShutdown)
     ProxoolFacade.shutdown(0);
}

 public void contextInitialized(ServletContextEvent contextEvent)
 {
  ServletContext context = contextEvent.getServletContext();
  String appDir = contextEvent.getServletContext().getRealPath("/");
  Properties properties = new Properties();

  Enumeration names = context.getInitParameterNames();
    while (names.hasMoreElements()) {
     String name = (String)names.nextElement();
 String value = context.getInitParameter(name);

    if (name.equals("xmlFile"))
    try {
       File file = new File(value);
        if (file.isAbsolute())
           JAXPConfigurator.configure(value, false);
         else
            JAXPConfigurator.configure(appDir + File.separator + value, false);
       }
       catch (ProxoolException e)
       {
         LOG.error("Problem configuring " + value, e);
       }
     else if (name.equals("propertyFile"))
       try {
         File file = new File(value);
      if (file.isAbsolute())
            PropertyConfigurator.configure(value);
         else
            PropertyConfigurator.configure(appDir + File.separator + value);
       }
       catch (ProxoolException e)
       {
         LOG.error("Problem configuring " + value, e);
       }
     else if (name.equals("autoShutdown"))
        this.autoShutdown = Boolean.valueOf(value).booleanValue();
    else if (name.startsWith("jdbc")) {
       properties.setProperty(name, value);
     }
   }

   if (properties.size() <= 0) return;
   try {
      PropertyConfigurator.configure(properties);
  } catch (ProxoolException e) {
     LOG.error("Problem configuring using init properties", e);
   }
  }
}

 

jndi配置方式

 

     web.xml:

<resource-ref>
  <res-ref-name>jdbc/test_xa</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
 </resource-ref>

 

applicationContext.xml:

<jee:jndi-lookup id="dataSource1"
   jndi-name="jdbc/test_xa"
   cache="true"
   resource-ref="true"
   lookup-on-startup="false"
   proxy-interface="javax.sql.DataSource"/>

 

找到tomcat的conf目录下的context.xml在Contex之间加代码:

<Resource name="jdbc/test_xa"  

         auth="Container"      

         type="javax.sql.DataSource"      

         driverClassName="oracle.jdbc.driver.OracleDriver"      

         url="jdbc:oracle:thin:@192.168.2.137:1521:orcl"      

         username="test"      

         password="123456"      

         maxActive="100"      

         maxIdle="30"      

        maxWait="10000" />

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    intellij idea使用tomcat开发时自动部署jndi数据源

    通过以上步骤,开发者可以在IntelliJ IDEA中使用Tomcat自动部署JNDI数据源,实现高效、灵活的数据库连接管理。这对于大型企业级应用来说尤其重要,因为它简化了数据库连接的配置和管理,使得团队协作变得更加顺畅。

    tomcat8 JNDI数据源加密

    TOMCAT8 JNDI对用户名和密码加密

    tomcat配置jndi数据源

    Tomcat 中的 JNDI 数据源是指将数据库连接信息注册到 JNDI 服务器中,以便在应用程序中可以通过 JNDI 名称来获取数据库连接。下面我们将详细介绍 Tomcat 配置 JNDI 数据源的多种方式。 方式一:配置单个应用数据源 ...

    tomcat配置JNDI数据源

    【描述】:“在Tomcat服务器上配置JNDI数据源,特别是通过DBCP连接池的方式” 【标签】:“tomcat,配置,JNDI数据源” 【内容】:配置JNDI数据源在Java Web应用程序中是一个重要的任务,它允许应用与数据库之间的...

    tomcat中配置jndi 数据源

    tomcat中配置jndi 数据源!!!

    java中使用tomcat提供的JNDI数据源

    ### Java中使用Tomcat提供的JNDI数据源详解 #### 一、JNDI简介与重要性 Java Naming and Directory Interface(JNDI)是一种Java应用程序查找和访问各种命名及目录服务的API。它允许Java应用程序查找并使用远程...

    tomcat jndi数据源解密factory

    自定义jndi数据源factory类,用于解密jndi中的加密数据,解密方式为DES,具体可根据实际需求修改。

    Tomcat6配置JNDI出错

    4. **Web应用上下文配置**:如果你的应用是在特定的Web应用上下文中使用JNDI,那么需要在该应用的`WEB-INF/web.xml`中进行额外的上下文初始化参数配置。 5. **权限问题**:配置的JNDI资源需要适当的权限才能被应用...

    JNDI数据源配置(tomcat)

    在 Tomcat 中,配置 JNDI 数据源有两种方式:单个应用独享数据源和全局 JNDI 数据源。 1. 单个应用独享数据源 在 Tomcat 的 server.xml 文件中,添加一个私有数据源的配置。例如,使用 c3p0 数据源的配置: ```...

    Tomcat jndi 配置数据源过程

    总结,通过上述步骤,你已经在Tomcat中成功配置了一个JNDI数据源,使得应用程序可以通过全局名字方便地获取和释放数据库连接。这种配置方式提高了代码的可复用性和可维护性,同时利用连接池优化了数据库操作的性能。

    Tomcat6+spring+jndi配置数据源说明.docx

    Tomcat6+Spring+JNDI配置数据源说明 本文档主要介绍了Tomcat6+Spring+JNDI配置数据源的详细步骤和原理。数据源是一个池子,里面有若干个数据连接对象,当需要时就从里面拿一个使用,使用完毕就放回去,如果超过最大...

    Tomcat6.0 JNDI数据源经典实例

    总结来说,这个Tomcat 6.0 JNDI数据源经典实例提供了从配置到使用的全过程,包括了必要的文件和脚本,便于开发者理解和实践JNDI数据源在实际项目中的应用。正确配置和使用JNDI数据源能有效管理和优化数据库连接,...

    Tomcat-5配置JNDI数据源

    【标题】:“Tomcat-5配置JNDI数据源” 【描述】:“配置Tomcat 5.5及以上版本中的JNDI数据源” 【标签】:“JNDI数据源”、“数据源”、“JNDI” 【正文】: 在Java应用服务器如Tomcat中,JNDI(Java Naming ...

    在Tomcat配置JNDI数据源的三种方式

    在Tomcat配置JNDI数据源的三种方式

    JNDI配置数据源在java web开发中的使用

    在Java EE环境中,数据源通常由应用服务器提供,如Tomcat、WebLogic、JBOSS等,它们预先配置好并注册到JNDI上下文中,供应用通过JNDI查找使用。 3. **配置数据源** 在不同的应用服务器中,配置数据源的方法略有...

    Tomcat6.0配置JNDI数据源完整例子(5.5与此配置相同)

    标题中的“Tomcat6.0配置JNDI数据源完整例子”是指在Apache Tomcat 6.0服务器中设置Java Naming and Directory Interface (JNDI)数据源的过程。JNDI是一个API,它允许应用程序查找和使用命名服务,如数据库连接池。...

    Tomcat中JNDI原理

    在Tomcat服务器中,JNDI的应用主要体现在其内置的JNDI实现——Tomcat JNDI,它允许开发者在应用中通过名称查找和使用资源,如数据源、环境变量等。本文将深入解析Tomcat 5.0中JNDI的工作原理,特别是`ContextBinding...

Global site tag (gtag.js) - Google Analytics