做一个项目可能会用到多个数据库开发一套,测试一套遇到问题可能连接数据库时要换来换去,要去改配置重启 我觉得十分麻烦,所以自己做了一个动态切换数据库的空能 先上代码
public class MultiDataSourceAction extends BaseAction {
...
private String url;
public void setUrl(String url){
this.url=url;
}
public String getUrl(){
return url;
}
/**
* 切换数据库
* @return
* @throws Exception
*/
public String changeDataSource() throws Exception{
this.addActionMessage("连接成功");
String beanName="dataSource";//默认105 要与spring配置文件配置bean id相同
if("11".equals(url)){
beanName="dataSource11";
}else if ("116".equals(url)) {
beanName="dataSource116";
}
TabDataSource.getInstance().changeDataSource(beanName);
return "success";
}
...
}
这是action代码 需要从页面传过来一个区分那个数据库的标识
public class TabDataSource{
public static TabDataSource NEWSOURCE=null;
public SessionFactory factory;
public static TabDataSource getInstance() throws Exception{
if(NEWSOURCE==null)
NEWSOURCE=new TabDataSource();
SessionManager.releaseSession();//释放登录用户让其好重新登录 SessionManager是一个session管理,关于session资源的持久化应该统一在此类 就不上代码了
return NEWSOURCE;
}
//new Configuration().configure().buildSessionFactory();
public void changeDataSource(String beanName)throws Exception{
//清除所有二级缓存 SourceTemplate是一个获得各种静态资源的类 大伙应该能想得到
factory=(SessionFactory)SourceTemplate.getSpringContextInstance().getBean("sessionFactory");
factory.evictQueries();
//切换数据源
HotSwappableTargetSource swapper=(HotSwappableTargetSource)SourceTemplate.getSpringContextInstance().getBean("swappableDataSource");
DataSource newDataSource=(DataSource)SourceTemplate.getSpringContextInstance().getBean(beanName);
swapper.swap(newDataSource);
// 重新加载菜单
//到这切换数据源算是完成了 下面的主要是我的项目里 在服务器启动的时候就初始化了一个servlet用来加载菜单所以要重新加载
ICache cache=(ICache)SourceTemplate.getSpringContextInstance().getBean("BaseSystemCache");
cache.getCachMap().clear();
cache.cacheInit();
CacheManager.addCache(cache.getCachName(), cache);
}
}
切换数据源在上面完成 下面看配置
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="swappable"/>
</property>....
</bean>
<bean id="swappable" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource">
<ref local="swappableDataSource"/>
</property>
</bean>
<bean id="swappableDataSource" class="org.springframework.aop.target.HotSwappableTargetSource">
<constructor-arg>
<ref local="dataSource"/>
</constructor-arg>
</bean>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>
SqlMapConfig.properties
</value>
</list>
</property>
</bean>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
<bean id="dataSource11"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.11url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
<bean id="dataSource116"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.116url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
到这就差不多了还需要个SqlMapConfig.properties就OK了 因为我所用的库就URL不同 其他的都是一样的 所以上面的配置大伙可以根据自己要求改
jdbc.datasource=org.apache.commons.dbcp.BasicDataSource
jdbc.driverClassName=com.ibm.db2.jcc.DB2Driver
jdbc.url=jdbc\:db2\://ip\:post/dbname
jdbc.username=username
jdbc.password=password
jdbc.105url=jdbc\:db2\://ip\:post/dbname
jdbc.116url=jdbc\:db2\://ip\:post/dbname
jdbc.11url=jdbc\:db2\://ip\:post/dbname
上面是SqlMapConfig.properties 配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="multi" namespace="/bbsp/bd" extends="leadmind-base">
<!-- -->
<global-results>
<result name="commonException">/billplatform/exceptions/exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="commonException" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="MultiDataSource_*" method="{1}" class="***.actions.MultiDataSourceAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
自己做这个感触很多 通过做这个小功能 对hibernate spring 了解又深了一些 但也遇到了很多问题 我通过spring 通过setter注入sessionfactory时怎么也注入不进去现在还不明白 但注入一些常量又可以 现在还不明白 只能用getbean方法..这个功能是完成了 但不知道效率咋样 请大家指点
分享到:
相关推荐
- **目的**: 避免在数据库重启过程中造成数据丢失或损坏。 - **操作方法**: - 登录到数据库服务器,通过查询相关的进程或服务状态来确认应用程序是否已经停止。 **知识点2:确认数据库状态** - **背景**: 在进行...
MySQL数据库服务器配置是数据库运维中的基础工作,本实验涵盖了MySQL的安装、配置、启动与关闭、日志管理、数据库与表的创建以及存储引擎的使用等多个关键知识点。 1. **MySQL安装**:实验要求下载并安装MySQL,这...
首先,理解数据库重启的基本流程至关重要。重启Oracle数据库通常涉及两个主要步骤:停止数据库实例(如果尚未关闭)和重新启动监听器以及数据库实例。以下是几种常见的重启方法: **方法1:使用`dbstart`和`lsnrctl...
实验1的目的是让学生熟悉MySQL数据库服务器的安装、配置和管理,包括日志系统、数据库创建、存储引擎的使用以及系统状态参数的查看等关键环节。以下是各实验内容的详细说明: 1. 安装MySQL:从官方网站下载适合操作...
在Linux系统中,切换数据库环境使用`export ORACLE_SID=数据库名`。Oracle的导出命令为`exp`,导入命令为`imp`,在命令中指定相应的用户、文件路径和数据库连接信息。当遇到导入导出问题,可以执行`catmet.sql`和`...
### Linux环境下Oracle数据库重启知识点详解 #### 一、概述 在Linux环境中,Oracle数据库的管理是常见的运维操作之一。为了确保系统的稳定运行,有时需要重启Oracle数据库及其监听器。本文将详细介绍在Linux环境下...
【服务器安装Centos7系统作为数据库服务器】 在搭建数据库服务器时,选择Centos7作为操作系统是一种常见的选择,因为它提供了一个稳定、安全且可定制的Linux环境。本文将详细阐述如何在Centos7上安装和配置数据库...
* 节点故障:重启数据库服务器,介质恢复,故障恢复,介质启动CRS,故障解决 * 数据库故障:数据库方面的故障,主备切换,其它故障 二、数据库应急恢复流程 数据库应急恢复流程可以分为以下步骤: 1. 使用本地...
在 Linux 中,可以使用 export ORACLE_SID=C1 命令切换到需要启动的数据库实例,然后使用 sqlplus /nolog 命令登录 Sqlplus 控制台,接着使用 connect / as sysdba 命令以系统管理员身份登录,最后使用 startup 命令...
MySQL复制(Replication)是MySQL数据库系统中一个重要的特性,它允许数据从一台MySQL服务器(称为Master)复制到另一台或多台MySQL服务器(称为Slave)。复制可以实现数据冗余和负载均衡,对于提高系统的可靠性和...
SPFILE的一个显著优势在于它可以被系统动态读写,这意味着许多参数可以在不重启数据库的情况下进行修改,大大减少了系统维护的时间成本。 3. **服务器参数文件的修改** 修改SPFILE通常使用`ALTER SYSTEM`命令,并...
kingbaseES不仅支持Windows操作系统,也支持Linux、Unix等主流服务器平台,具备良好的跨平台兼容性,适应不同企业的IT环境。 8. **版本与许可** 提供的kingbase3.1_Win2K_5users版本,特别适合小型企业或教学环境...
在Linux系统下搭建Web服务器及数据库服务器是一项基础但至关重要的工作,这主要涉及到服务器环境的配置、软件的安装以及服务的启动与管理。本篇将详细介绍这一过程。 首先,Linux系统的安装是整个流程的起点。通常...
- 重启服务器后,再次使用isql登录SQL Server,并将数据库上线。 ```sql online database 数据库名 ``` 4. **继续操作:** - 开启新事务,切换到master数据库,将数据库的状态更新为可用状态(`0`)。 ```sql ...
- 在服务器宕机的情况下,重启服务器并执行`#/etc/init.d/init.crs start`。 - 使用`crs_stat -t`检查所有节点的CRS服务资源是否已处于在线状态。 - 如果服务器未宕机,可以尝试停止并重新启动CRS服务。 - **...
在本文中,我们将详细讨论如何安装MySQL 5.1数据库服务器,导入数据,以及卸载MySQL服务器的步骤。MySQL是一个流行的开源关系型数据库管理系统,广泛应用于各种规模的企业和项目中。 ### 一、安装MySQL 5.1数据库...
1. **切换用户**:首先,需要切换到数据库管理员用户,如`oracle`,通过命令`su - oracle`进行身份切换。 2. **登录数据库**:接着,使用`sqlplus / as sysdba`命令以SYSDBA权限登录Oracle数据库。 3. **启动数据库*...
与相关团队沟通,确保他们能接受即将进行的数据库重启。 三、创建归档日志路径 在开始设置归档模式前,需要在服务器上创建一个用于存储归档日志的目录,例如`E:\archivelog`。这个路径应该根据实际的存储策略和安全...