springmvc集成多数据源, aop动态切换

昨天写了一篇springboot 集成多数据源的。 今儿研究了研究, 补上一篇,springmvc 集成多数据源的。直接上代码:pom:4.0.0com.taoyeshuLocation0.0.1-SNAPSHOTwar<properties> <!-- spring版本号 --> <spring.version>4.2.1.RELEASE&...
摘要由CSDN通过智能技术生成

昨天写了一篇springboot 集成多数据源的。 今儿研究了研究, 补上一篇,springmvc 集成多数据源的。直接上代码:

pom:

4.0.0
com.taoyeshu
Location
0.0.1-SNAPSHOT
war

<properties>
	<!-- spring版本号 -->
	<spring.version>4.2.1.RELEASE</spring.version>
	<!-- mybatis版本号 -->
	<mybatis.version>3.3.0</mybatis.version>
	<!-- log4j日志文件管理包版本 -->
	<slf4j.version>1.7.12</slf4j.version>
	<log4j.version>2.3</log4j.version>
	<junit.version>4.11</junit.version>
	<shiro.version>1.2.4</shiro.version>
	<ehcache.version>2.10.0</ehcache.version>
	<tomcatjdbc.version>7.0.61</tomcatjdbc.version>
	<fastjson.version>1.2.7</fastjson.version>
	<lang3.version>3.4</lang3.version>
	<connector.version>5.1.36</connector.version>
	<mybatis-spring.version>1.2.3</mybatis-spring.version>
	<commons-fileupload.version>1.3.1</commons-fileupload.version>
	<mybatis-ehcache.version>1.0.0</mybatis-ehcache.version>
	 <mysql-connector-java.version>8.0.11</mysql-connector-java.version>
</properties>

<dependencies>
	<dependency>
		<groupId>com.google.guava</groupId>
		<artifactId>guava</artifactId>
		<version>19.0-rc2</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.1.0</version>
	</dependency>

	<dependency>
		<groupId>javax.servlet.jsp.jstl</groupId>
		<artifactId>javax.servlet.jsp.jstl-api</artifactId>
		<version>1.2.1</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
	<dependency>
		<groupId>commons-io</groupId>
		<artifactId>commons-io</artifactId>
		<version>2.6</version>
	</dependency>

	<!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
	<dependency>
		<groupId>commons-collections</groupId>
		<artifactId>commons-collections</artifactId>
		<version>3.2.2</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
	<dependency>
		<groupId>com.mchange</groupId>
		<artifactId>c3p0</artifactId>
		<version>0.9.5.2</version>
	</dependency>

	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-core</artifactId>
		<version>2.6.4</version>
	</dependency>
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-databind</artifactId>
		<version>2.6.4</version>
	</dependency>
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-annotations</artifactId>
		<version>2.6.4</version>
	</dependency>
com.alibaba druid 1.0.28
	<dependency>
		<groupId>taglibs</groupId>
		<artifactId>standard</artifactId>
		<version>1.1.2</version>
	</dependency>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>${junit.version}</version>
		<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
		<scope>test</scope>
	</dependency>
	<!-- spring核心包 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-oxm</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context-support</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${spring.version}</version>
	</dependency>

	<!-- Shiro security -->
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-core</artifactId>
		<version>${shiro.version}</version>
	</dependency>
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-web</artifactId>
		<version>${shiro.version}</version>
	</dependency>
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-cas</artifactId>
		<version>${shiro.version}</version>
	</dependency>
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-spring</artifactId>
		<version>${shiro.version}</version>
	</dependency>
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-ehcache</artifactId>
		<version>${shiro.version}</version>
	</dependency>
	<!-- end of Shiro security -->

	<!-- ehcache -->
	<dependency>
		<groupId>net.sf.ehcache.internal</groupId>
		<artifactId>ehcache-core</artifactId>
		<version>${ehcache.version}</version>
	</dependency>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-ehcache</artifactId>
		<version>${mybatis-ehcache.version}</version>
	</dependency>

	<!-- mybatis核心包 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>${mybatis.version}</version>
	</dependency>

	<!-- mybatis/spring包 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>${mybatis-spring.version}</version>
	</dependency>

	<!-- 导入tomcat-jdbc -->
	<dependency>
		<groupId>org.apache.tomcat</groupId>
		<artifactId>tomcat-jdbc</artifactId>
		<version>${tomcatjdbc.version}</version>
	</dependency>

	<!-- mysql连接 -->
	 <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql-connector-java.version}</version>
    </dependency>

	<!-- sqlserver连接 -->
	<dependency>
		<groupId>com.microsoft.sqlserver</groupId>
		<artifactId>mssql-jdbc</artifactId>
		<version>6.1.0.jre8</version>
	</dependency>
	<!-- <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc4</artifactId> 
		<version>4.0</version> </dependency> -->
	<!-- Fastjson -->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>fastjson</artifactId>
		<version>${fastjson.version}</version>
	</dependency>

	<!-- 日志文件管理包 -->
	<!-- log start -->
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>${log4j.version}</version>
	</dependency>

	<!-- 格式化对象,方便输出日志 -->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>${slf4j.version}</version>
	</dependency>

	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>${slf4j.version}</version>
	</dependency>
	<!-- log end -->

	<!-- lang3 -->
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>${lang3.version}</version>
	</dependency>

	<!-- 上传组件包 -->
	<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>${commons-fileupload.version}</version>
	</dependency>
	<dependency>
		<groupId>aopalliance</groupId>
		<artifactId>aopalliance</artifactId>
		<version>1.0</version>
	</dependency>

	<dependency>
		<groupId>cglib</groupId>
		<artifactId>cglib-nodep</artifactId>
		<version>3.1</version>
	</dependency>


	<dependency>
		<groupId>org.aspectj</groupId>
		<artifactId>aspectjrt</artifactId>
		<version>1.8.7</version>
	</dependency>

	<dependency>
		<groupId>org.aspectj</groupId>
		<artifactId>aspectjweaver</artifactId>
		<version>1.8.7</version>
	</dependency>

	<!-- POI -->
	<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi</artifactId>
		<version>3.11</version>
	</dependency>
org.apache.poi poi-ooxml 3.17 org.apache.commons commons-collections4 4.1
	<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>1.3.1</version>
	</dependency>

	<dependency>
		<groupId>commons-io</groupId>
		<artifactId>commons-io</artifactId>
		<version>2.4</version>
	</dependency>

	<dependency>
		<groupId>commons-codec</groupId>
		<artifactId>commons-codec</artifactId>
		<version>1.10</version>
	</dependency>

	<!-- org.json -->
	<!--JSON is a light-weight, language independent, data interchange format. 
		See http://www.JSON.org/ -->
	<dependency>
		<groupId>org.json</groupId>
		<artifactId>json</artifactId>
		<version>20160212</version>
	</dependency>
org.projectlombok lombok 1.16.18
</dependencies>
<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.1</version>
			<configuration>
				<encoding>UTF-8</encoding>
				<source>1.7</source>
				<target>1.7</target>
				<meminitial>512m</meminitial>
				<maxmem>1024m</maxmem>
				<fork>true</fork>
				<url>http://118.193.211.166:8080/YuanCMS</url>
				<id>tomcat</id>
				<username>admin</username>
				<password>admin</password>
				<path>/ErpAPI</path>
			</configuration>
		</plugin>
	</plugins>
</build>

jdbc:
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/huangling?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
jdbc.username=root
jdbc.password=root

ajdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
ajdbc.url=jdbc:sqlserver://localhost:1433;databasename=test1
ajdbc.username=shsany
ajdbc.password=goodluck

spring-context-db.xml:

<?xml version="1.0" encoding="UTF-8"?>














<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="typeAliasesPackage" value="com.taoyeshu" />
	<property name="typeAliasesSuperType" value="com.taoyeshu.common.persistence.BaseEntity" />
    <!-- 自动扫描mapping.xml文件,**表示迭代查找 com.taoyeshu.modules.matter.mapper -->
    <property name="mapperLocations" value="classpath:com/taoyeshu/*/*/mapper/*.xml" />
</bean>




<!-- 事务配置 -->
<bean id="transactionManager"
	class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- 事务管理拦截器 -->




 <!-- DAO接口所在包名,Spring会自动查找其下的类 ,包下的类需要使用@MapperScan注解,否则容器注入会失败 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.taoyeshu.*.*.mapper" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

<!--开启动态代理-->
 <aop:aspectj-autoproxy proxy-target-class="true"/>
<bean id="MyDbInterceptor" class="com.taoyeshu.MyDbInterceptor"/>	

加粗样式这里 要有三个类:
public class MyDataSourceRouter extends AbstractRoutingDataSource {

/**
 * 获得数据源的key
 */
@Override
protected Object determineCurrentLookupKey() {
	return  DataSourceKeyManager.getDataSourceKey();
}

}

package com.taoyeshu.common.db;

import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

import java.util.*;

/**

  • 数据源key的存储控制器
    */
    public class DataSourceKeyManager {

    private static final ThreadLocal DB_KEY = new ThreadLocal();

    public static String getDataSourceKey(){
    return DB_KEY.get();
    }
    public static void setDataSourceKey(String dsName){
    DB_KEY.set(dsName);
    }

}

加粗样式 这里配置我们要动态切换的规则以及路径

package com.taoyeshu;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import com.taoyeshu.common.db.DataSourceKeyManager;

@Aspect
//@Component
public class MyDbInterceptor {
@Pointcut(“execution(* com.taoyeshu.modules.renylocation.service….(…) )”)
//@Pointcut(“execution(* *(…))”)
public void dataSourceSqlServer(){

}
	 @Before(value = "dataSourceSqlServer()") 
	 public void befor() throws Exception {
		 DataSourceKeyManager.setDataSourceKey("sqlservera");
		 System.out.println("befor:"+DataSourceKeyManager.getDataSourceKey()); 
		 }
	
	 
	// @After(value = "dataSourceMysql()") 
	 @After(value = "dataSourceSqlServer()") 
	 public void after(){ 
		 DataSourceKeyManager.setDataSourceKey("");
		 } 

}
有的代码贴上去,不知道为什么 csdn 上不显示, 所有看到的内容有点不全, 后面在研究, 补上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值