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

多数据源

阅读更多

多数据源配置,当时不能达到动态数据源。自己想要的是动态的,搞错,不过还是写下博客吧。也是知识。

 

实体类:

public class DataEntity implements java.io.Serializable {
	private Integer id;
	private String name;
	private int age;
	
其他的get,set省略了!

 

 

映射文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.mul.entity.DataEntity" table="dataentity"
		mutable="false">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="native"></generator>
		</id>
		<property name="name" type="java.lang.String">
			<column name="name" length="128" />
		</property>
		<property name="age">
			<column name="age" />
		</property>
	</class>
</hibernate-mapping>

 

 

一个标识类,可以要可以不要的。

package com.mul.spring;
public class DataSourceTypeKey {
	public static String ADMIN = "admin1";//标识一个数据源
	public static String GUEST = "guest1";//标识另一个数据源
}

 

 

选择一个标识,一定要是线程安全的所以才特意的写了个类来存放

package com.mul.spring;

public class DataSourceTypeChoose {
	private static final ThreadLocal  threadLocal = new ThreadLocal();
	
	public static void setThreadLocal(String value) {//value就是DataSourceTypeKey 中的一个
		threadLocal.set(value);
	}
	
	public static ThreadLocal getThreadLocal() {
		return threadLocal;
	}
	
	public static void clearDataSourceType () { 
		threadLocal.remove();
	} 
	
}

 

真正提供给spring文件读取的类      必须继承AbstractRoutingDataSource

package com.mul.spring;

import java.sql.SQLException;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class MyAbstractRoutingDataSource extends AbstractRoutingDataSource {

	@Override
	protected Object determineCurrentLookupKey() {
		// spring调用方法得到产生sessionfacroty时用哪个数据源,还得在文件中配
		return DataSourceTypeChoose.getThreadLocal();
	}
}

 

spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
	   http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-2.5.xsd
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
	default-autowire="byName">
	
	
	<context:annotation-config />
	<bean id="parentDataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName">
			<value>com.mysql.jdbc.Driver</value>
		</property>
		<property name="username" value="root"></property>
		<property name="password" value="hejie"></property>
	</bean>

	<bean id="primaryDataSource" parent="parentDataSource">
		<property name="url">
			<value>jdbc:mysql://localhost:3306/test1</value>
		</property>
	</bean>

	<bean id="backupDataSource" parent="parentDataSource">
		<property name="url">
			<value>jdbc:mysql://localhost:3306/test2</value>
		</property>
	</bean>
               <!-- 数据源 里面有两个不同的数据源,key就是我们之前的标识,对应了一个数据源。还有一个默认的-->
	<bean id="dataSource" scope="prototype"
		class="com.mul.spring.MyAbstractRoutingDataSource">
		<property name="targetDataSources">
			<map key-type="java.lang.String">
			        <entry key="admin1" value-ref="primaryDataSource" />
			        <entry key="guest1" value-ref="backupDataSource" />
			</map>
		</property>
		<property name="defaultTargetDataSource" ref="primaryDataSource" />
	</bean>


	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.current_session_context_class">
					thread
				</prop>
				<prop key="hibernate.show_sql">false</prop>
			</props>
		</property>

		<property name="mappingResources">
			<list>
				<value>
					com/mul/entity/DataEntity.hbm.xml
				</value>
			</list>
		</property>

		<property name="exposeTransactionAwareSessionFactory">
			<value>false</value>
		</property>

	</bean>
	
	
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
<!--		<property name="hibernateManagedSession" value="false"/>-->
	</bean>
	<tx:annotation-driven transaction-manager="transactionManager" />
	<context:component-scan base-package="com.mul" />

		<aop:config>
	
			<aop:pointcut id="testservice"
				expression="execution(* com.mul.service.*Service.*(..))" />
			
				
			<aop:advisor id="testServiceAd" advice-ref="txAdvice" pointcut-ref="testservice" />		
		</aop:config>
		<tx:advice id="txAdvice" transaction-manager="transactionManager">
			<tx:attributes>
				<tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<!--				<tx:method name="*" propagation="REQUIRED"/>-->
			</tx:attributes>
		</tx:advice>
<!-- dao -->
	<bean id="dataEntityDao" class="com.mul.dao.DataEntityDao">

	</bean>
	<!-- service -->
	<bean id="dataEntityService" class="com.mul.service.DataEntityService">

	</bean>
	
</beans>

 

分享到:
评论

相关推荐

    SpringBoot配置多数据源实现动态切换数据源

    本文将深入探讨如何在SpringBoot项目中配置多数据源,并实现数据源的动态切换,帮助你理解和掌握这一核心技能。 首先,我们理解"多数据源"的概念。在SpringBoot应用中,多数据源意味着系统能够连接并操作多个不同的...

    ssm实现多数据源配置

    在实际项目中,有时我们需要访问多个数据库,这时就需要实现多数据源配置。 在SSM框架中实现多数据源配置,主要涉及以下几个关键步骤和知识点: 1. **配置文件设置**:首先,你需要在`applicationContext.xml`或`...

    spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码

    在Spring Boot 2框架中,实现多数据源的配置是一项重要的任务,特别是在大型企业级应用中,可能需要连接到不同的数据库来满足不同业务的需求。在这个项目中,我们有两个主要的数据访问技术:Hibernate和MyBatis,...

    SpringMVC配置多数据源实战

    在SpringMVC框架中配置多数据源是一项常见的需求,尤其在大型企业级应用中,由于业务的复杂性,往往需要连接不同的数据库以满足不同模块的需求。以下将详细讲解如何实现这一功能。 首先,理解数据源(DataSource)...

    spring mvc 配置多数据源

    ### Spring MVC 中配置多数据源详解 在Spring框架中配置多数据源的需求比较常见,尤其在需要处理不同类型的数据库或需要实现数据隔离的应用场景中。本文将详细介绍如何在Spring MVC项目中配置并使用多数据源。 ###...

    springmvc_mybatis_多数据源

    "springmvc_mybatis_多数据源"这个项目就是针对这种情况提供的一种解决方案。 首先,我们来看SpringMVC如何处理多数据源。在SpringMVC中,我们可以利用Spring的DataSourceTransactionManager和...

    Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

    《Spring Boot多数据源(支持Spring声明式事务切换和回滚)》 Spring Boot多数据源技术是构建高效、灵活的多租户SaaS架构的关键。在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论...

    springboot-AOP实现多数据源动态切换(Druid连接池)

    在Spring Boot项目中实现多数据源动态切换是一项高级特性,能够使应用根据不同业务需求访问不同的数据库,从而实现服务的解耦和数据库操作的优化。该技术的关键在于如何在同一个应用中配置和使用多个数据源,以及...

    SpringBoot+druid+多数据源示例

    本示例将详细讲解如何在SpringBoot项目中集成Druid并实现多数据源的自动切换。 首先,我们需要理解多数据源的概念。多数据源意味着应用程序可以同时连接和操作多个不同的数据库,这对于数据分层、高可用性和分布式...

    SpringBoot+Atomikos+动态多数据源+事务+2种切换数据源的方式

    本主题将深入探讨如何利用SpringBoot结合Atomikos实现动态多数据源以及事务管理,并介绍两种切换数据源的方法。 首先,SpringBoot简化了传统Spring应用的初始化过程,它通过自动配置和starter包让开发者快速搭建...

    springmvc多数据源连接

    在这种情况下,Spring MVC框架提供了一种灵活的方式来处理多数据源的连接。本文将深入探讨如何在Spring MVC项目中实现多数据源的动态切换,以Oracle数据库为例。 首先,我们需要在配置文件中定义多个数据源。在...

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多数据源。在Spring Boot中,可以使用`DataSource`接口的实现类,如`HikariCP`或`Druid`,创建两...

    SpringBoot+gradle+mybatis多数据源动态配置

    本项目结合了SpringBoot、Gradle和MyBatis,旨在实现多数据源的动态配置,这对于处理多个数据库或者分库分表的场景尤其有用。以下是对这个项目的详细解析: **SpringBoot** SpringBoot是由Pivotal团队提供的全新...

    mysql和Oracle的多数据源配置demo

    本示例"mysql和Oracle的多数据源配置demo"聚焦于如何在SpringBoot框架下同时集成和管理MySQL与Oracle这两种不同的数据库系统,以实现多数据源的配置。这在需要处理不同数据库类型或者需要实现数据冗余和故障切换的...

    jeecg3.5多数据源配置说明

    Jeecg是一款强大的企业级快速开发平台,它支持多数据源配置,允许用户根据业务场景灵活切换和管理不同的数据库。在Jeecg 3.5版本中,实现多数据源配置是一项重要的功能,使得开发者可以更高效地处理多数据库环境下的...

    Springboot+Mybatis+Druid多数据源配置

    当我们面临需要处理多个数据库的情况时,多数据源配置就显得尤为重要。本教程将围绕"Springboot+Mybatis+Druid多数据源配置"这一主题,详细介绍如何实现这一功能。 首先,Spring Boot简化了Spring应用的初始化和...

    springboot连接池、动态配置多数据源连接池,特别适合大数据部门、数据中台服务的多数据源连接池.zip

    本项目——"spring-boot-easy-connection-pool-master",主要探讨了如何在Spring Boot环境下配置和管理连接池,并且实现了动态配置多数据源的功能,这对于大数据部门和数据中台服务尤其重要。 首先,让我们深入理解...

    spring3+springmvc+jpa+hibernate多数据源

    "spring3+springmvc+jpa+hibernate多数据源"是一个示例项目,它演示了如何在一个应用中集成Spring 3、Spring MVC、JPA 2.0以及Hibernate,以实现对多个数据源的支持。下面将详细介绍这些技术及其集成的关键点。 **...

    Mybaits-plus优雅的实现多数据源及分表

    本文将深入探讨如何使用MyBatis-Plus优雅地实现多数据源及分表策略,为系统的高效运行提供支持。 首先,多数据源是指在一个应用中同时连接并操作多个不同的数据库,这种设计模式常用于分布式系统或高可用架构中,以...

    spring boot多数据源配置

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

Global site tag (gtag.js) - Google Analytics