您的位置:首页 > 移动开发

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

2015-02-07 16:26 519 查看
【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】数据源配置:

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

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

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

[html] view
plaincopyprint?

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

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

[html] view
plaincopyprint?

<propertyname propertyname="driverClassName">

<value>com.mysql.jdbc.Driver</value>

</property>

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

[html] view
plaincopyprint?

<property name="url">

<value>

jdbc:mysql://localhost:3306/tie?useUnicode=true&characterEncoding=utf-8

</value>

</property>

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

[html] view
plaincopyprint?

<property name="username">

<value>root</value>

</property>

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

[html] view
plaincopyprint?

<property name="password">

<value>123</value>

</property>

</bean>

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

[html] view
plaincopyprint?

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="dataSource">

<ref bean="dataSource" />

</property>

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

[html] view
plaincopyprint?

<property name="mappingResources">

<list>

<value>com/alonely/vo/User.hbm.xml</value>

</list>

</property>

</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)中配置一个叫做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架构一向的追求。

【参考博客】:(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: