两个数据库在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 否则会一直连接异常
<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层实现切换