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

           【0】 前言J ava 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. >  
  3. <beans>  

[html]  view plain copy print ?
  1. <bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource">  

  

[html]  view plain copy print ?
  1. <propertyname propertyname="driverClassName">  
  2.     <value>com.mysql.jdbc.Drivervalue>  
  3.    property>  

  

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

  

[html]  view plain copy print ?
  1. <property name="username">  
  2.     <value>rootvalue>  
  3.    property>  

   

[html]  view plain copy print ?
  1. <property name="password">  
  2.     <value>123value>  
  3.    property>  
  4. bean>  


[html]  view plain copy print ?
  1. <bean id="sessionFactory"  
  2.   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  3.    <property name="dataSource">  
  4.     <ref bean="dataSource" />  
  5.    property>  

   

[html]  view plain copy print ?
  1. <property name="mappingResources">  
  2.     <list>  
  3.      <value>com/alonely/vo/User.hbm.xmlvalue>  
  4.     list>  
  5.    property>  
  6. bean> 
   上面是一个MySQL的例子,下面我将其他的数据库汇总如下:

(1) Oracle






   (2)DB2






  (3)SQL Server






   
 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. 
* * 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.
* * 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联系起来了。
   
    com/ascent/bean/hibernate.cfg.xml
   
样,SpringHibernate的第一步整合就完成了,现在到了关键的地方—如何让SpringHibernate双剑合璧来实现业务逻辑?
还是在applicationContext.xml文件中先做一个配置。
   
     
   
 
在上面你大概可以感觉到Spring给我们带来的好处了,SpringIoC模式可以统一管理各层,而又使各层松散耦合在一起,使各层之间实现最大的解耦性,这也是Web架构一向的追求。
【参考博客】:(1) http://blog.csdn.net/heng_ji/article/details/7022171
                        (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

    

你可能感兴趣的:(spring)