`
angushj
  • 浏览: 58300 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring配置多个用户的datasource

阅读更多

配置两个不同的数据源

 

1、jdbc.properties文件

hibernate.hbm2ddl.auto=update
hibernate.show_sql=true

#SQL SERVER 2000 SP4
#database=SQL Server 2000
hibernate.dialectSql=org.hibernate.dialect.SQLServerDialect
jdbc.driverClassNameSql=net.sourceforge.jtds.jdbc.Driver
jdbc.urlSql=jdbc:jtds:sqlserver://10.108.19.117:1433/air
jdbc.usernameSql=sa
jdbc.passwordSql=123456789


#Oralce
database=Oracle
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@10.108.19.117:1521:csair
jdbc.username=kongqin2
jdbc.password=p2ssword

 在Spring中配置

<!-- ========================= RESOURCE DEFINITIONS ========================= -->
<bean id="propertyConfigurer"
	class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="fileEncoding" value="UTF-8" />
	<property name="locations">
		<list>
			<value>classpath:jdbc.properties</value>
		</list>
	</property>
</bean>

 

2、DataSource配置

<bean id="dataSource" depends-on="initDataBaseManager"
	class="com.mchange.v2.c3p0.ComboPooledDataSource"
	destroy-method="close">
	<property name="driverClass"
		value="${jdbc.driverClassName}" />
	<property name="jdbcUrl" value="${jdbc.url}" />
	<property name="user" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
	<property name="minPoolSize">
		<value>5</value>
	</property>
	<property name="maxPoolSize" value="30" />
	<property name="initialPoolSize" value="10" />
	<property name="maxIdleTime" value="60" />
	<property name="acquireIncrement" value="5" />
	<property name="maxStatements" value="0" />
	<property name="idleConnectionTestPeriod" value="60" />
	<property name="acquireRetryAttempts" value="30" />
	<property name="breakAfterAcquireFailure" value="true" />
	<property name="testConnectionOnCheckout" value="false" />
</bean>


<bean id="dataSourceSql" 
        class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass"
            value="${jdbc.driverClassNameSql}" />
        <property name="jdbcUrl" value="${jdbc.urlSql}" />
        <property name="user" value="${jdbc.usernameSql}" />
        <property name="password" value="${jdbc.passwordSql}" />
        <property name="minPoolSize">
            <value>5</value>
        </property>
        <property name="maxPoolSize" value="30" />
        <property name="initialPoolSize" value="10" />
        <property name="maxIdleTime" value="60" />
        <property name="acquireIncrement" value="5" />
        <property name="maxStatements" value="0" />
        <property name="idleConnectionTestPeriod" value="60" />
        <property name="acquireRetryAttempts" value="30" />
        <property name="breakAfterAcquireFailure" value="true" />
        <property name="testConnectionOnCheckout" value="false" />
</bean>

 

3、SessionFactory配置

<bean id="sessionFactory" 
	class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="mappingLocations">
		<list>
			<value>classpath*:/org/jbpm/**/*.hbm.xml</value>
		</list>
	</property>
	<property name="annotatedClasses">
		<list>
			<value>com.forgon.security.model.Resource</value>
		</list>
	</property>
	<property name="hibernateProperties">
		<props>
			<prop key="hibernate.dialect">
				${hibernate.dialect}
			</prop>
			<prop key="hibernate.show_sql">true</prop>
			<prop key="hibernate.generate_statistics">true</prop>
               			<prop key="hibernate.connection.release_mode">auto</prop>
		               	<prop key="hibernate.autoReconnect">true</prop>
               			<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
			<prop key="hibernate.cache.use_query_cache">true</prop>
			<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
			<prop key="current_session_context_class">thread</prop>
		</props>
	</property>
	<property name="eventListeners">
		<map>
			<entry key="merge">
				<bean
					class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
			</entry>
		</map>
	</property>
</bean>


<!-- Hibernate SessionFactory -->
    <bean id="sessionFactorySql" 
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSourceSql" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    ${hibernate.dialectSql}
                </prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.generate_statistics">true</prop>
                <prop key="hibernate.connection.release_mode">auto</prop>
                <prop key="hibernate.autoReconnect">true</prop>
                <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                <prop key="current_session_context_class">thread</prop>
            </props>
        </property>
    </bean>

 

4、Dao配置

<bean id="objectSqlDao"
        class="com.forgon.tools.hibernate.ObjectSqlDaoImpl">
        <property name="sessionFactory" ref="sessionFactorySql" />
</bean>

<bean id="objectDao"
	class="com.forgon.tools.hibernate.ObjectDaoImpl">
	<property name="sessionFactory" ref="sessionFactory" />
</bean>

 这里的Dao继承了HibernateDaoSupport。具体代码如下:

public class ObjectSqlDaoImpl extends HibernateDaoSupport implements ObjectSqlDao,
		Serializable {

	private static final long serialVersionUID = 1L;

	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public void save(Object po) {
		getHibernateTemplate().save(po);
	}

	public void clearCache() {
		getHibernateSession().flush();
		getHibernateSession().clear();
	}

	public void evict(Object object) {
		getHibernateTemplate().evict(object);
	}

	public void flush() {
		getHibernateTemplate().flush();
	}

}

 

5、测试用例

 

public class OtherDBConnetionTest extends AbstractTransactionalDataSourceSpringContextTests{

	private ObjectDao objectDao;
	
	private ObjectSqlDao objectSqlDao;
	
	public void setObjectDao(ObjectDao objectDao) {
		this.objectDao = objectDao;
	}

	public void setObjectSqlDao(ObjectSqlDao objectSqlDao) {
		this.objectSqlDao = objectSqlDao;
	}

	protected String[] getConfigLocations() {
		setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME);
		return new String[] { "spring/*.xml"};
	}
	
	@SuppressWarnings("unchecked")
	public void testOtherDBConnetion(){
		String sql = "where po.name = 'admin'";
		User user = (User) objectDao.getBySql(User.class.getSimpleName(), sql);
		assertNotNull(user);
		assertEquals("admin", user.getName());
		
		sql = "select * from SS_USERS ";
		ResultSet rs = objectSqlDao.executeSql(sql);
		assertNotNull(rs);
		try {
			rs.next();
			String name = (String)rs.getObject("name");
			assertEquals("admin", name);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

    objectSqlDao中的executeSql方法,源码如下:

public ResultSet executeSql(String sql) {
	Connection conn = getSession().connection();
	PreparedStatement ps;
	ResultSet rs = null;
	try {
		ps = conn.prepareStatement(sql);
		rs = ps.executeQuery();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return rs;
}

 

分享到:
评论

相关推荐

    Spring动态切换datasource实现mysql多住多从

    在Spring配置文件中,可以定义多个DataSource bean,每个bean代表一个数据库连接。例如,我们可以创建名为`primaryDataSource`和`secondaryDataSource`的bean,分别对应主库和从库。 2. **使用AOP(面向切面编程)*...

    spring中dataSource的配置以及配合IOC的使用

    在大型系统中,可能需要配置多个数据源。Spring提供了`AbstractRoutingDataSource`,可以动态选择要使用的数据源。通过自定义实现,可以根据业务逻辑或事务上下文决定使用哪个`DataSource`。 总结,`dataSource`在...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    通过Spring的配置,我们可以轻松地管理多个数据源,并根据业务逻辑进行动态切换。这通常涉及到使用`@Qualifier`注解来指定特定的数据源。 2. **Druid数据源** Druid是一个高性能、监控和扩展性极强的数据库连接池...

    Spring 加载多个配置文件

    ### Spring 加载多个配置文件详解 #### 一、引言 在现代软件开发中,Spring 框架因其强大的依赖注入(DI)和面向切面编程(AOP)能力而备受青睐。尤其在构建大型应用时,为了提高代码的可读性和可维护性,将系统...

    Spring配置多个数据源

    本文将详细介绍如何在Spring应用中配置多个数据源。 首先,我们来理解数据源(DataSource)的概念。数据源是Java中用于存储数据库连接信息的接口,它实现了JDBC规范中的`javax.sql.DataSource`接口。通过数据源,...

    SpringBoot框架Datasource注入

    此外,Spring Boot还支持多数据源配置,这对于微服务架构或多数据库的应用场景非常有用。我们可以通过不同的`@Profile`注解来区分不同环境的`DataSource`,或者使用`@Primary`注解来指定默认的数据源。 在实际开发...

    spring boot多数据源配置

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...

    Spring Boot多数据源(JdbcTemplate)配置与使用

    在Spring Boot应用中,我们经常需要处理来自多个数据源的数据,比如在开发微服务架构时,每个服务可能对应一个特定的数据源。`JdbcTemplate`是Spring框架提供的一个用于简化数据库操作的工具,它使得数据库访问更为...

    转:spring多个定时任务quartz配置

    本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...

    Spring Boot+Jpa多数据源配置Demo(支持不同数据库)

    在Spring Boot中,我们可以通过创建不同的`DataSource` bean来配置多个数据源。每个数据源通常会有一个对应的`JdbcTemplate`或`JpaEntityManagerFactory`。首先,我们需要在`application.yml`或`application....

    SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置).docx

    本文将详细介绍如何通过配置多个Mapper扫描不同的包路径来实现多数据源的配置。 #### 二、多数据源配置背景与应用场景 在Spring Boot项目中,默认情况下通常只需要配置一个数据源,即项目的主数据源。但在某些特定...

    spring配置文件详解

    接着,`&lt;beans&gt;`标签是Spring配置的根元素,它包含了所有bean的定义。在这个例子中,我们看到多个命名空间的引入: 1. `xmlns:beans` 是Spring核心配置的命名空间,用于定义bean。 2. `xmlns:xsi` 是XML Schema ...

    学习Spring笔记_DataSource

    对于需要处理多个数据库的应用,Spring支持配置多个DataSource。这需要通过配置不同的bean ID和数据源属性,以及在业务逻辑中选择合适的数据源进行操作。 7. **Spring JdbcTemplate和NamedParameterJdbcTemplate**...

    dynamic-datasource-spring-boot-starter_多数据源_

    `dynamic-datasource-spring-boot-starter`通过自动化配置和扩展点设计,使得开发者能够在不修改代码的情况下,轻松地在多个数据源之间切换。 **Spring Boot**是Spring框架的一个衍生项目,旨在简化Spring应用程序...

    spring 配置文件详解

    Spring 配置文件是一个或多个标准的 XML 文档,applicationContext.xml 是 Spring 的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。 在 Spring 配置文件中,主要包含了以下...

    如何在spring中等价配置得到原本由jndi配置实现的数据源

    通常,在Web应用程序中,数据源常常通过Java Naming and Directory Interface (JNDI)进行管理,这允许多个应用共享同一个数据源,例如在应用服务器如Tomcat、JBoss或WebLogic中。然而,有时我们可能希望在非Web环境...

    spring多个定时任务quartz配置

    7. **多任务配置**:如果需要配置多个定时任务,只需重复上述步骤,为每个Job和Trigger创建不同的bean,并在适当的地方添加到Scheduler中。 通过以上步骤,你可以在Spring中成功配置并运行多个Quartz定时任务。记得...

    Spring管理配置多个数据源

    要配置多个数据源,我们需要创建两个或更多的Bean,每个Bean代表一个数据源。例如,我们可以创建两个数据源Bean,分别命名为`primaryDataSource`和`secondaryDataSource`。每个Bean都需要设置相应的连接参数,如URL...

    spring配置两个数据

    而在多数据源管理方面,Spring同样提供了灵活且强大的支持,允许开发者在一个应用程序中配置和使用多个数据源,满足了复杂业务场景下对不同数据库操作的需求。 ### Spring配置两个数据源 #### 核心概念解析 **...

Global site tag (gtag.js) - Google Analytics