Spring+MyBatis多数据源配置实现
Spring+MyBatis多数据源配置实现
有资本再款 发表于3年前
Spring+MyBatis多数据源配置实现
  • 发表于 3年前
  • 阅读 26
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd	
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
		default-autowire="byName">

	<bean id="xingeimsDataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://172.16.4.39/xingeims?characterEncoding=utf8" />
		<property name="username" value="xinge" />
		<property name="password" value="xingeims" />
	</bean>

	<bean id="creditDataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/credit?characterEncoding=utf8" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>


	<bean id="multipleDataSource" class="com.xinge.ims.common.MultipleDataSource">
		<property name="defaultTargetDataSource" ref="xingeimsDataSource" />
		<property name="targetDataSources">
			<map>
				<entry key="xingeimsDataSource" value-ref="xingeimsDataSource" />
				<entry key="creditDataSource" value-ref="creditDataSource" />
			</map>
		</property>
	</bean>

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="multipleDataSource" />
		<property name="typeAliasesPackage" value="com.xinge.ims.dal.domain" />
	</bean>

	<!-- scan for mappers and let them be autowired -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.xinge.ims.dal.persistence" />
	</bean>

	<!-- transaction manager, use JtaTransactionManager for global tx -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="multipleDataSource" />
	</bean>

	<!-- enable transaction demarcation with annotations -->
	<tx:annotation-driven transaction-manager="transactionManager" />

</beans>
public class MultipleDataSource extends AbstractRoutingDataSource{

	private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<String>();

    public static void setDataSourceKey(String dataSource) {
        dataSourceKey.set(dataSource);
    }
	
	@Override
	protected Object determineCurrentLookupKey() {
		return dataSourceKey.get();
	}

	
}
@Component
@Aspect
public class MultipleDataSourceAspectAdvice {

	/**
	 * 设置数据源,拦截dao层
	 * @param jp
	 * @return
	 * @throws Throwable
	 */
	@Around("execution(* com.xinge.ims.dal.persistence.*.*(..))")
	public Object doAround(ProceedingJoinPoint jp) throws Throwable {
		if (jp.getTarget() instanceof CreditDAO) {
			MultipleDataSource.setDataSourceKey("creditDataSource");
		} else {
			MultipleDataSource.setDataSourceKey("xingeimsDataSource");
		}
		return jp.proceed();
	}
}


共有 人打赏支持
粉丝 5
博文 79
码字总数 16312
评论 (0)
×
有资本再款
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: