Spring中applicationContext.xml配置文件中数据库数据源配置

【0】 前言:Java Web开发的无论哪种框架都离不开各种xml配置,Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的“图纸”。Java EE程序员必须学会并灵活应用这份“图纸”准确地表达自己的“生产意图”。Spring配置文件是一个或多个标准的XML文档,ApplicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。本文着重讲数据库数据源配置。

【1】作用:使用ApplicationContext,你可以让系统加载你的bean(例如,在Servlet容器初始化ContextLoaderServlet时,通过ContextLoader类加载Spring Framework),而不是使用编码方式来加载。 ApplicationContext接口是context包的基础,位于org.springframework.context包里,提供了BeanFactory的所有功能。除此之外, ApplicationContext为了支持Framework的工作方式,提供了以下的功能:

a.MessageSource,提供了语言信息的国际化支持

b.提供资源(如URL和文件系统)的访问支持

c.为实现了ApplicationListener接口的bean提供了事件传播支持

d.为不同的应用环境提供不同的context,例如支持web应用的XmlWebApplicationContext类

【2】数据源配置:

<!-- 头文件,主要注意一下编码 -->

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>

<!-- 建立数据源 -->

[html] view plaincopy

  1. <bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource">

<!-- 数据库驱动,我这里使用的是Mysql数据库 -->

[html] view plaincopy

  1. <propertyname propertyname="driverClassName">
  2. <value>com.mysql.jdbc.Driver</value>
  3. </property>

<!-- 数据库地址,这里也要注意一下编码,不然乱码可是很郁闷的哦! -->

[html] view plaincopy

  1. <property name="url">
  2. <value>
  3. jdbc:mysql://localhost:3306/tie?useUnicode=true&characterEncoding=utf-8
  4. </value>
  5. </property>

<!-- 数据库的用户名 -->

[html] view plaincopy

  1. <property name="username">
  2. <value>root</value>
  3. </property>

<!-- 数据库的密码 -->

[html] view plaincopy

  1. <property name="password">
  2. <value>123</value>
  3. </property>
  4. </bean>

<!-- 把数据源注入给Session工厂 -->

[html] view plaincopy

  1. <bean id="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <property name="dataSource">
  4. <ref bean="dataSource" />
  5. </property>

<!-- 配置映射文件 -->

[html] view plaincopy

  1. <property name="mappingResources">
  2. <list>
  3. <value>com/alonely/vo/User.hbm.xml</value>
  4. </list>
  5. </property>
  6. </bean>

上面是一个MySQL的例子,下面我将其他的数据库汇总如下:

(1) Oracle

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />

<property name="url" value="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.101)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)(SERVER=DEDICATED)))" />

<property name="username" value="rootl" />

<property name="password" value="1234" />

</bean>

(2)DB2

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="com.ibm.db2.jdbc.app.DB2Driver" />

<property name="url" value="jdbc:db2:thin:@localhost:5000/testDB" />

<property name="username" value="rootl" />

<property name="password" value="1234" />

</bean>

(3)SQL Server

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />

<property name="url" value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName = testDB" />

<property name="username" value="rootl" />

<property name="password" value="1234" />

</bean>

org.apache.commons.dbcp.BasicDataSource 需要commons-pool.jar,commons-dbcp-1.2.2.jar,commons-collections-3.2.jar三个JAR包,但是这种模式不能动态修改数据库,下面将介绍动态修改数据库链接。

【3】动态修改数据库链接(此没经过具体测试,转自点击打开链接)

需要访问多个数据库,而且需要在服务器运行不重新启动的情况下,动态的修改spring中配置的数据源datasource,spring的配置文件是在容器启动的时候就加载到内存中的,如果手动改了application.xml,我们必须要重新启动服务器配置文件才会生效。而在spring中提供了一个类WebApplicationContext,这个类可以让你获得一些bean,可以修改内存中的信息,通过这个类来实现的。下面是具体的代码。


  1. package com.southdigital.hospital;
  2. import java.io.IOException;
  3. import javax.servlet.ServletContext;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import org.springframework.web.context.WebApplicationContext;
  9. import org.springframework.web.context.support.WebApplicationContextUtils;
  10. import com.mchange.v2.c3p0.ComboPooledDataSource;
  11. public class ChangeSpringConfig extends HttpServlet
  12. {
  13. private String ipAddress = "127.0.0.1";
  14. /**
  15. * The doGet method of the servlet. <br>
  16. *
  17. * This method is called when a form has its tag value method equals to get.
  18. *
  19. * @param request the request send by the client to the server
  20. * @param response the response send by the server to the client
  21. * @throws ServletException if an error occurred
  22. * @throws IOException if an error occurred
  23. */
  24. public void doGet(HttpServletRequest request, HttpServletResponse response)
  25. throws ServletException, IOException
  26. {
  27. doPost(request, response);
  28. }
  29. /**
  30. * The doPost method of the servlet. <br>
  31. *
  32. * This method is called when a form has its tag value method equals to post.
  33. *
  34. * @param request the request send by the client to the server
  35. * @param response the response send by the server to the client
  36. * @throws ServletException if an error occurred
  37. * @throws IOException if an error occurred
  38. */
  39. public void doPost(HttpServletRequest request, HttpServletResponse response)
  40. throws ServletException, IOException
  41. {
  42. //先取得servleContext对象,提供给spring的WebApplicationUtils来动态修改applicationContext.xml
  43. ipAddress = request.getParameter("ipAddress");
  44. System.out.println(ipAddress);
  45. ServletContext servletContext = this.getServletContext();
  46. WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
  47. ComboPooledDataSource cpds = (ComboPooledDataSource) applicationContext.getBean("dataSource");
  48. cpds.setJdbcUrl("jdbc:mysql://"+ipAddress+":3306/ssh");
  49. }
  50. }

注意:通过这种方法修改applicationContext.xml文件的时候用c3p0,而不可以用dbcp,dbcp不支持动态修改读取到内存里面的数据。

【4】Spring与Hibernate通过applicationContext.xml关联

配置Spring,使它能管理Hibernate。其实,只要在Spring的配置文件(我们这里是applicationContext.xml)中配置一个叫做sessionFactory的bean,Spring就可以和Hibernate联系起来了。

<bean id="sessionFactory" class="org.springframework.orm.hibernate.Local SessionFactoryBean">

<property name="configLocation">

<value>com/ascent/bean/hibernate.cfg.xml</value>

</property>

</bean>

这样,Spring和Hibernate的第一步整合就完成了,现在到了关键的地方——如何让Spring和Hibernate双剑合璧来实现业务逻辑?

还是在applicationContext.xml文件中先做一个配置。

<bean id="transactionManager" class="org.springframework.orm.hibernate. HibernateTransactionManager">

<property name="sessionFactory">

<ref local="sessionFactory"/>

</property>

</bean>

在上面你大概可以感觉到Spring给我们带来的好处了,Spring的IoC模式可以统一管理各层,而又使各层松散耦合在一起,使各层之间实现最大的解耦性,这也是Web架构一向的追求。

Spring中applicationContext.xml配置文件中数据库数据源配置

相关推荐