Spring3.2+mybatis3.2 多数据源环境搭建

1.需求场景

需要读取多个数据源,超过2个。

2.项目环境

Spring3.2+mybatis3.2 jdk1.7 tomcat7.0.55

3.解决方法

(1)项目结构

Eclipse 常规项目结构(非maven项目)

包结构

-com.ssm.web.action

-com.ssm.web.service

-com.ssm.web.serviceimpl

-com.ssm.web.dao

-com.ssm.web.bean

-com.ssm.xml.tables

-com.ssm.web.util

(2)配置文件

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <!-- 日志输出到控制台 -->
    <appender name="logConsole" class="org.apache.log4j.ConsoleAppender">
    	<param name="threshold" value="ERROR"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="[%t] %p - %m%n"/>
        </layout>
    </appender>
     <!-- 错误日志输出到文件 每天一个文件 -->
    <appender name="logError" class="org.apache.log4j.DailyRollingFileAppender">
	  	<param name="File" value="/opt/ssm/logs/error.log"/>
	  	<param name="Append" value="true"/>
	  	<param name="threshold" value="ERROR"/>
	  	<param name="DatePattern" value="'.'yyyy-MM-dd'.txt'"/>
	  	<layout class="org.apache.log4j.PatternLayout">
	    	<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}|%m%n"/>
	  	</layout>
	  	<filter class="org.apache.log4j.varia.LevelRangeFilter">  
            <param name="LevelMin" value="ERROR"/>  
            <param name="LevelMax" value="ERROR"/>  
        </filter>
	</appender>  
	
	  <!-- 运行日志输出到文件 每天一个文件 -->
    <appender name="logInfo" class="org.apache.log4j.RollingFileAppender">
	  	<param name="File" value="/opt/ssm/logs/info.log"/>
	  	<param name="Append" value="true"/>
	  	<param name="threshold" value="INFO"/>
	  	<layout class="org.apache.log4j.PatternLayout">
	    	<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
	  	</layout>
	  	<filter class="org.apache.log4j.varia.LevelRangeFilter">  
            <param name="LevelMin" value="INFO"/>  
            <param name="LevelMax" value="INFO"/>  
        </filter>
	</appender>  
	
	<!-- 设置根日志级别 -->
    <root>
    	<level value="INFO" />
        <appender-ref ref="logError"/>
        <appender-ref ref="logInfo"/>
        <appender-ref ref="logConsole"/>
    </root>
    
</log4j:configuration>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <settings>
   <!-- 输出sql日志到控制台 -->
   <setting name="logImpl" value="STDOUT_LOGGING"/> 
   <!--解决映射结果集为map类型时存在数据字段值为空时不返回值的情况-->
   <setting name="callSettersOnNulls" value="true"/>

   </settings>
	<typeAliases>
		<package name="com.ssm.web.bean" />
	</typeAliases>
     <mappers>
		<mapper resource="com/ssm/xml/tables/UserMapper.xml" />
     </mappers>

</configuration>

spring-content.xml

<?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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.2.xsd">

	<!-- 配置DataSource数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8&amp;
noAccessToProcedureBodies=true&amp;autoReconnect=true" />
		<property name="username" value="root" />
		<property name="password" value="root" />
		<property name="maxActive" value="50" />
		<property name="maxIdle" value="5" />
		<property name="maxWait" value="5000" />
		<property name="defaultAutoCommit" value="true" />
		<property name="removeAbandoned" value="true" />
		<property name="removeAbandonedTimeout" value="60" />
		<property name="validationQuery" value="SELECT 1"></property>
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
		<property name="testWhileIdle" value="true" />
		<property name="logAbandoned" value="false" />
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<property name="numTestsPerEvictionRun" value="30" />
		<property name="minEvictableIdleTimeMillis" value="1800000" />
	</bean>

	<!-- 创建SqlSessionFactory,同时指定数据源 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	</bean>

	<!-- 配置DataSource数据源 -->
	<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/ssm?
           characterEncoding=UTF-8&amp;
       noAccessToProcedureBodies=true&amp;autoReconnect=true" />
		<property name="username" value="root" />
		<property name="password" value="root" />
		<property name="maxActive" value="50" />
		<property name="maxIdle" value="5" />
		<property name="maxWait" value="5000" />
		<property name="defaultAutoCommit" value="true" />
		<property name="removeAbandoned" value="true" />
		<property name="removeAbandonedTimeout" value="60" />
		<property name="validationQuery" value="SELECT 1"></property>
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
		<property name="testWhileIdle" value="true" />
		<property name="logAbandoned" value="false" />
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<property name="numTestsPerEvictionRun" value="30" />
		<property name="minEvictableIdleTimeMillis" value="1800000" />
	</bean>

	<!-- 创建SqlSessionFactory,同时指定数据源 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource2" ref="dataSource2" />
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	</bean>

	<!-- 配置DataSource3数据源 -->
	<bean id="dataSource3" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8&amp;noAccessToProcedureBodies=true&amp;autoReconnect=true" />
		<property name="username" value="root" />
		<property name="password" value="root" />
		<property name="maxActive" value="50" />
		<property name="maxIdle" value="5" />
		<property name="maxWait" value="5000" />
		<property name="defaultAutoCommit" value="true" />
		<property name="removeAbandoned" value="true" />
		<property name="removeAbandonedTimeout" value="60" />
		<property name="validationQuery" value="SELECT 1"></property>
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
		<property name="testWhileIdle" value="true" />
		<property name="logAbandoned" value="false" />
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<property name="numTestsPerEvictionRun" value="30" />
		<property name="minEvictableIdleTimeMillis" value="1800000" />
	</bean>

	<!-- 创建SqlSessionFactory,同时指定数据源 -->
	<bean id="sqlSessionFactory3" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource3" />
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	</bean>
</beans>

user-content.xml

<?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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.2.xsd">

	<!-- 用户 -->
	<bean id="UserDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.ssm.user.UserDao" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
  <!---下面可以配置对应sqlSessionFactory2  sqlSessionFactory3 的数据库连接--->
</beans>

transaction-context.xml

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"
      >
       
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <aop:config>
        <aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service..*.*(..))" order="1"/>
    </aop:config>
    
    <tx:advice id="txAdvice" transaction-manager="transactionManager">   	
        <tx:attributes>
        	<tx:method name="load*" read-only="true" />
            <tx:method name="get*" read-only="true" />
            <tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="crud*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="schedule*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="do*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
            <tx:method name="*" />
        </tx:attributes>
    </tx:advice>
</beans>

web-context.xml

<?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:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-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/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    
    <!-- 启动扫描com.ssm.web下所有的controller --> 
	<context:component-scan base-package="com.ssm.web"/>
	<mvc:annotation-driven/>
	<mvc:default-servlet-handler/>
	
	<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
	<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
			</list>
		</property>
	</bean>

	<!-- 启动Spring MVC 的注解功能,完成请求和注解POJO的映射 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<ref bean="mappingJacksonHttpMessageConverter" />  <!-- json转换器 -->
			</list>
		</property>
	</bean>
	<!-- spring MVC 文件上传 -->
	<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
        <property name="defaultEncoding" value="UTF-8"/>  
    </bean>
	
	 <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
        <property name="exceptionMappings">  
            <props>  
                <prop key="org.springframework.web.servlet.PageNotFound">error/pageNotFound</prop>  
                <prop key="org.springframework.dao.DataAccessException">error/dataAccessFailure</prop>  
                <prop key="org.springframework.transaction.TransactionException">error/dataAccessFailure</prop>  
            </props>  
        </property>  
    </bean>  
	
	 <!-- jsp页面解析器,当Controller返回XXX字符串时,先通过拦截器,然后该类就会在/WEB-INF/views/目录下,查找XXX.jsp文件-->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/"/>
		<property name="suffix" value=".jsp"/>
	</bean>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    		classpath:*-context.xml,
    	</param-value>
  </context-param>
  <!-- 过滤静态资源,spring拦截器不需要拦截 -->
  <servlet-mapping>
	  <servlet-name>default</servlet-name>
	  <url-pattern>*.js</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
	  <servlet-name>default</servlet-name>
	  <url-pattern>*.css</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
	  <servlet-name>default</servlet-name>
	  <url-pattern>*.gif</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
	  <servlet-name>default</servlet-name>
	  <url-pattern>*.swf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
	  <servlet-name>default</servlet-name>
	  <url-pattern>*.jpg</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
	  <servlet-name>default</servlet-name>
	  <url-pattern>*.png</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
	  <servlet-name>default</servlet-name>
	  <url-pattern>*.ico</url-pattern>
  </servlet-mapping>
   <!--     end   -->
  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
    			classpath:web-context.xml
    		</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
 
  <error-page>  
    <error-code>404</error-code>  
    <location>/error.jsp</location>  
  </error-page>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
   <session-config>
  <session-timeout>360</session-timeout>
  </session-config>
</web-app>

(3)action 层示例

@Controller
@RequestMapping("ssm")

public class UserController{

@Autowried
private UserService userService;

@RequestMapping("login")
public String login(String username,String password){

 User u = uservice.getUser(username,password);
 if(user!=null){
  return  "susscess";
 }else{
 return "fail";
}
}
}

(4)数据源连接对应关系

每个 xxxxMapper.xml 对应一个数据源,新的DAO需要在user-content.xml 中配置对应的sqlsessionfactory 数据源

(5)相关jar包

aopalliance-1.0.jar
aspectjweaver-1.6.0.jar
commons-beanutils-1.8.0.jar
commons-codec-1.9.jar
commons-collections-3.2.1.jar
commons-configuration-1.6.jar
commons-dbcp.jar
commons-fileupload-1.2.1.jar
commons-io-2.4.jar
commons-lang-2.4.jar
commons-lang-2.6.jar
commons-lang3-3.3.2.jar
commons-logging-1.1.3.jar
commons-pool.jar
ezmorph-1.0.6.jar
htrace-core-2.04.jar
httpclient-4.3.3.jar
httpcore-4.3.2.jar
httpmime-4.3.3.jar
jackson-core-asl-1.8.8.jar
jackson-core-asl-1.9.2.jar
jackson-mapper-asl-1.8.8.jar
jackson-mapper-asl-1.9.2.jar
json-lib-2.4-jdk15.jar
log4j-1.2.17.jar
mybatis-3.2.2.jar
mybatis-spring-1.2.0.jar
mysql-connector-java-5.1.10-bin.jar

poi-3.11-20141221.jar
poi-examples-3.11-20141221.jar
poi-excelant-3.11-20141221.jar
poi-ooxml-3.11-20141221.jar
poi-ooxml-schemas-3.11-20141221.jar
poi-scratchpad-3.11-20141221.jar
protobuf-java-2.5.0.jar
serializer-2.7.1.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
spring-aop-3.2.2.RELEASE.jar
spring-aspects-3.2.2.RELEASE.jar
spring-beans-3.2.2.RELEASE.jar
spring-context-3.2.2.RELEASE.jar
spring-context-support-3.2.2.RELEASE.jar
spring-core-3.2.2.RELEASE.jar
spring-expression-3.2.2.RELEASE.jar
spring-jdbc-3.2.3.RELEASE.jar
spring-orm-3.2.2.RELEASE.jar
spring-tx-3.2.2.RELEASE.jar
spring-web-3.2.2.RELEASE.jar
spring-webmvc-3.2.2.RELEASE.jar
standard.jar
xalan-2.7.1.jar
xercesImpl-2.11.0.jar
xml-apis-1.4.01.jar
xmlbeans-2.6.0.jar

注:

1.UserMapper.xml 以写配置文件sql的方式

2.serviceimpl 层类 需要加入相应注解 @service("userService")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值