读书人

Tomcat中运用jndi连接数据源

发布时间: 2012-08-25 10:06:20 作者: rapoo

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" 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" />

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

读书人网 >软件架构设计

热点推荐