`
angushj
  • 浏览: 57220 次
  • 性别: 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 boot多数据源配置

    一个springboot的多数据配置,从mapper到controller完整的一个业务流程

    dynamic-datasource-spring-boot-starter-v3.5.1.zip

    Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...

    dynamic-datasource-spring-boot-starter-v3.5.1.tar.gz

    Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...

    spring-boot-dynamic-datasource

    基于Spring实现的动态数据源框架使用方法如下:配置文件在springboot的配置文件中配置多个数据源其中prefix = "spring.slavedatasource" 的配置文件为从库,datasource为主库spring.datasource.url=jdbc:mysql://...

    spring-multiple-datasources:有关如何使用Liquibase在Spring Boot中配置多个数据源以进行数据库初始化的示例代码

    使用Liquibase的Spring Boot多个数据源多个数据源您需要向yaml配置文件中添加几个数据源定义。 datasource: primary: url: jdbc:mysql://localhost/primary username: root driver-class-name: ...

    spring框架多数据源切换问题的解决

    首先,这个方案完全是在spring的框架下解决的,数据源依然配置在spring的配置文件中,sessionFactory依然去配置它的dataSource属性,它甚至都不知道dataSource的改变。 其次,实现简单,易于维护。这个方案虽然我说...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    spring-boot-mybatis-multidatasource多数据源配置(oracle)

    3, application.yml中配置了双数据源,根据需要可以加多个数据源,同时要在datasource包中新建数据源配置,参考那两个配置。 4, 启动项目,测试接口在DataSourceController中,只用注入相关的bean就能使用。 5, 使用...

    multiple-datasource-spring-apps:在JDBCJPA上下文中展示多个数据源的POC

    多个DataSource JPA配置这支持轻松注册用于多数据库JPA的所有必需位。 它与Spring Boot的现有DataSource配置机制一起使用。 假设您有一个来自的新生成的Spring Boot项目,其中选择了JDBC数据库驱动程序(在本例中为...

    dynamic-datasource-spring-boot-starter:springboot的动态数据源多数据源动态数据源主从分离读写分离分布式事务https:dynamic-datasource.com

    一个基于springboot的快速集成多数据源的启动器简介dynamic-datasource-spring-boot-starter是一个基于springboot的快速集成多数据源的启动器。其支持Jdk 1.7 +,SpringBoot 1.4.x 1.5.x 2.xx。文件| 文献资料|特性...

    Spring MVC 入门实例

    你可以在 props 标签内配置多个 prop 标签. 我们将在后面编写 com.ideawu.HelloController 类. 上面, 我们在 web.xml 文件中告诉 ContextLoaderListener, 我们还有另外两个配置文件 /WEB-INF/database.xml 和 /...

    springcloud入门

    在测试gateway负载均衡时可以启动单个项目的多个实例,具体方式如下: 1、项目启动类右键run as-&gt;run configurations..,打开配置框。 2、java application右键new,打开新建窗口。 3、顶部tab选中Main,在name中...

    Spring动态切换多数据源Demo

    请自行修改com/resources/datasource.properties中数据库配置,Demo中配置的两个数据源,一个是Mysql,一个是Oracle。 运行之前请自行建立数据库的表。

    Spring 动态切换数据源

    Spring 动态切换 数据源 可同事在多个数据源中切换

    spring-boot示例项目

    本项目示例基于spring boot 最新版本(2.1.9)实现,Spring Boot、Spring Cloud 学习示例...多数Spring Boot应用只需要很少的Spring配置。 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Sprin

    Spring-Reference_zh_CN(Spring中文参考手册)

    处理多个持久化单元 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 ...

    dynamic datasource 多数据源启动器.rar

    相信在很多使用MybatisPlus框架的小伙伴都会遇到多数据源的配置问题,并且官网也给出了推荐使用多数据源 (dynamic-datasource-spring-boot-starter) 组件来实现。由于最近项目也在使用这个组件来实现多数据源切换,...

    Spring AOP 动态多数据源的实例详解

    例如在一个spring和Mybatis的框架的项目中,我们在spring配置中往往是配置一个dataSource来连接数据库,然后绑定给sessionFactory,在dao层代码中再指定sessionFactory来进行数据库操作。   正如上图所示,每一块...

    Spring 2.0 开发参考手册

    9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring ...

    spring boot动态多数据源demo

    在查阅大量多数据源配置资料和文章并结合工作实践的基础上开发了一个简单实用的spring boot动态多数据源demo,该demo主要功能如下: 自定义多数据源类MultiplyDataSource(继承HikariDataSource),通过多线程类...

Global site tag (gtag.js) - Google Analytics