deles 发表于 2017-2-1 14:25:11

Tomcat中使用jndi连接数据源

  因为开发的时候系统是用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" />
页: [1]
查看完整版本: Tomcat中使用jndi连接数据源