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>  

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

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

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

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

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

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

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

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

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

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

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

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

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

  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,可以修改内存中的信息,通过这个类来实现的。下面是具体的代码。 

package com.southdigital.hospital; 
import java.io.IOException; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.web.context.WebApplicationContext; 
import org.springframework.web.context.support.WebApplicationContextUtils; 
import com.mchange.v2.c3p0.ComboPooledDataSource; 

public class ChangeSpringConfig extends HttpServlet 
{ 
private String ipAddress = "127.0.0.1"; 
/** 
* The doGet method of the servlet. <br> 
* 
* This method is called when a form has its tag value method equals to get. 
* 
* @param request the request send by the client to the server 
* @param response the response send by the server to the client 
* @throws ServletException if an error occurred 
* @throws IOException if an error occurred 
*/ 

public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException 
{ 
doPost(request, response); 
} 

/** 
* The doPost method of the servlet. <br> 
* 
* This method is called when a form has its tag value method equals to post. 
* 
* @param request the request send by the client to the server 
* @param response the response send by the server to the client 
* @throws ServletException if an error occurred 
* @throws IOException if an error occurred 
*/ 
public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException 
{ 
//先取得servleContext对象,提供给spring的WebApplicationUtils来动态修改applicationContext.xml 

ipAddress = request.getParameter("ipAddress"); 
System.out.println(ipAddress); 

ServletContext servletContext = this.getServletContext(); 
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext); 
    ComboPooledDataSource cpds = (ComboPooledDataSource) applicationContext.getBean("dataSource"); 
    cpds.setJdbcUrl("jdbc:mysql://"+ipAddress+":3306/ssh"); 
} 
} 
注意:通过这种方法修改applicationContext.xml文件的时候用c3p0,而不可以用dbcp,dbcp不支持动态修改读取到内存里面的数据。

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

配置Spring,使它能管理Hibernate。其实,只要在Spring的配置文件(我们这里是applicationContext.xml中配置一个叫做sessionFactorybeanSpring就可以和Hibernate联系起来了。
<bean id="sessionFactory" class="org.springframework.orm.hibernate.Local SessionFactoryBean">
    <property name="configLocation">
    <value>com/ascent/bean/hibernate.cfg.xml</value>
    </property>
</bean>
样,SpringHibernate的第一步整合就完成了,现在到了关键的地方—如何让SpringHibernate双剑合璧来实现业务逻辑?
还是在applicationContext.xml文件中先做一个配置。
<bean id="transactionManager" class="org.springframework.orm.hibernate. HibernateTransactionManager">
    <property name="sessionFactory">
      <ref local="sessionFactory"/>
    </property>
  </bean>
在上面你大概可以感觉到Spring给我们带来的好处了,SpringIoC模式可以统一管理各层,而又使各层松散耦合在一起,使各层之间实现最大的解耦性,这也是Web架构一向的追求。
                        (2)http://blog.csdn.net/snn1410/article/details/7846582
                        (3)http://blog.csdn.net/lhzjj/article/details/27403463
                        (4)http://blog.csdn.net/foxhlc/article/details/8789416

    
发布了47 篇原创文章 · 获赞 44 · 访问量 26万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章