SSM项目中使用两个不同的数据库解决方案。

两个数据库在SSM中切换 使用AOP技术
#数据设置
jdbc.driver_class = com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url = jdbc:sqlserver:databaseName=AIS2606;
jdbc.username = sa
jdbc.password = 123456

jdbc.url2 = jatabaseName=DataVX;
jdbc.username2 = sa
jdbc.password2 = 123456

Spring-Data 配置
使用java 连接SQLseverl 不能配置testOnBorrow 否则会一直连接异常

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



<context:property-placeholder location=“classpath:datasource/datasource.properties”/>

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver_class}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver_class}"/>
    <property name="url" value="${jdbc.url2}"/>
    <property name="username" value="${jdbc.username2}"/>
    <property name="password" value="${jdbc.password2}"/>
</bean>
  <bean id="dynamicDataSource" class="com.costcenter.pool.DynamicDataSource">
    <!-- 这里可以指定默认的数据源 -->
    <property name="defaultTargetDataSource" ref="dataSource" />
    <property name="targetDataSources">
    
        <map key-type="java.lang.String">
            <!-- 指定lookupKey和与之对应的数据源 -->
            <entry key="dataSource" value-ref="dataSource"></entry>
            <entry key="dataSource2" value-ref="dataSource2"></entry>
        </map>
    </property>
</bean>

实际项目中两个数据切换
在这里插入图片描述

public class LogAopAction {

@Pointcut(("execution(* com.costcenter.dao..*.*(..))"))
private void contrllerAspect(){}


@Before("controllerAspect()")
public void dataSwitch(JoinPoint joinPoint){
	Signature signature = joinPoint.getSignature();
	MethodSignature methodSignature = (MethodSignature) signature;
	Method method = methodSignature.getMethod();
	
	DataSourceChange data = null;
	String dataSource = "";
	
	if(method != null) {
		data =method.getAnnotation(DataSourceChange.class);
		if(data != null) {
			dataSource = data.dataSource();
			if(dataSource != null) {
				DynamicDataSource .setDataSourceKey(dataSource);
			}
		}
	}
}

配置注解:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
@Documented
public @interface DataSourceChange {
String dataSource() default “”;
}

dao层实现切换
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42283373/article/details/88013217