使用spring+springMVC+mybatis如何解决多数据源和sql对应的问题

peter_zhangxw 2016-09-08 06:39:10

使用spring+springMVC+mybatis如何解决多数据源和sql对应的问题
Creating MapperFactoryBean with name 'gameDAO' and 'com.pico.cms.dao.GameDAO' mapperInterface
Enabling autowire by type for MapperFactoryBean with name 'gameDAO'.
Creating MapperFactoryBean with name 'moduleDAO' and 'com.pico.cms.dao.ModuleDAO' mapperInterface
Enabling autowire by type for MapperFactoryBean with name 'moduleDAO'.
Creating MapperFactoryBean with name 'orderDAO' and 'com.pico.cms.dao.OrderDAO' mapperInterface
Enabling autowire by type for MapperFactoryBean with name 'orderDAO'.
Creating MapperFactoryBean with name 'roleDAO' and 'com.pico.cms.dao.RoleDAO' mapperInterface
Enabling autowire by type for MapperFactoryBean with name 'roleDAO'.
Creating MapperFactoryBean with name 'serviceDAO' and 'com.pico.cms.dao.ServiceDAO' mapperInterface
Enabling autowire by type for MapperFactoryBean with name 'serviceDAO'.
Creating MapperFactoryBean with name 'userDAO' and 'com.pico.cms.dao.UserDAO' mapperInterface
Enabling autowire by type for MapperFactoryBean with name 'userDAO'.
SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8, 1.5.9, 1.5.10]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Logging initialized using 'class org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl' adapter.
...全文
736 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
peter_zhangxw 2017-07-13
  • 打赏
  • 举报
回复
问题已解决特来结帖:在applicationcontext中配置如下: <bean id="puc" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${puc.jdbc.driverClassName}" /> <property name="url" value="${puc.jdbc.url}" /> <property name="username" value="${puc.jdbc.username}" /> <property name="password" value="${puc.jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="5" /> <!-- 连接池最大使用连接数量 --> <property name="maxTotal" value="20" /> <!-- 连接池最大空闲 --> <property name="maxIdle" value="10" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="5" /> <!-- 获取连接最大等待时间 --> <property name="maxWaitMillis" value="6000" /> <property name="validationQuery"> <value>SELECT 1</value> </property> <!--removeAbandoned: 是否自动回收超时连接 <property name="removeAbandoned" value="true" />--> <!--removeAbandonedTimeout: 超时时间(以秒数为单位) --> <property name="removeAbandonedTimeout" value="180" /> <property name="testOnBorrow"> <value>true</value> </property> </bean> <bean id="pay" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${pay.jdbc.driverClassName}" /> <property name="url" value="${pay.jdbc.url}" /> <property name="username" value="${pay.jdbc.username}" /> <property name="password" value="${pay.jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="5" /> <!-- 连接池最大使用连接数量 --> <property name="maxTotal" value="20" /> <!-- 连接池最大空闲 --> <property name="maxIdle" value="10" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="5" /> <!-- 获取连接最大等待时间 --> <property name="maxWaitMillis" value="6000" /> <property name="validationQuery"> <value>SELECT 1</value> </property> <!--removeAbandoned: 是否自动回收超时连接 <property name="removeAbandoned" value="true" />--> <!--removeAbandonedTimeout: 超时时间(以秒数为单位) --> <property name="removeAbandonedTimeout" value="180" /> <property name="testOnBorrow"> <value>true</value> </property> </bean> <!-- 配置多个数据源 --> <bean id="multipleDataSource" class="com.pico.cms.util.MultipleDataSource"> <property name="defaultTargetDataSource" ref="puc" /> <property name="targetDataSources"> <map> <entry key="puc" value-ref="puc" /> <entry key="pay" value-ref="pay" /> </map> </property> </bean> 写一个切换数据库的工具类: import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import com.pico.cms.dao.Pay; import com.pico.cms.dao.Puc; /* *切换数据库工具 * */ @Component @Aspect public class MultipleDataSourceAspectAdvice { @Around("execution(* com.pico.cms.dao.*.*(..))") public Object doAround(ProceedingJoinPoint jp) throws Throwable { if (jp.getTarget() instanceof Puc) { Signature signature = jp.getSignature(); System.out.println(signature); MultipleDataSource.setDataSourceKey("puc"); } else if (jp.getTarget() instanceof Pay) { MultipleDataSource.setDataSourceKey("pay"); } return jp.proceed(); } } 在DAO层中写两个接口: public interface Puc { } public interface Pay { } 写其他DAO接口时哪个需要连接puc就extend Puc,pay同理 之后就可以实现数据库自动切换了。
wswzh0329 2017-01-04
  • 打赏
  • 举报
回复
引用 2 楼 Fasdfg12的回复:
就一个mysql数据库,里面有两个数据源puc,pay
。。解决了吗??????????
peter_zhangxw 2016-09-09
  • 打赏
  • 举报
回复
就一个mysql数据库,里面有两个数据源puc,pay
街头小贩 2016-09-09
  • 打赏
  • 举报
回复
多数据源指的是一个项目从多个库中取数据?

10,612

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧