web.xml配置
<context-param> <param-name>webAppRootKey</param-name> <param-value>trac</param-value> </context-param> <!-- Spring的log4j监听器 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</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>utf8</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> <!-- Spring view分发器 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <description>spring mvc 配置文件</description> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
springMvc-servlet.xml配置
<mvc:annotation-driven /> <context:component-scan base-package="com.trac" /> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> <!-- freemarker config --> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/freemarker/" /> <property name="freemarkerVariables"> <map> <entry key="xml_escape" value-ref="fmXmlEscape" /> </map> </property> <property name="freemarkerSettings"> <props> <prop key="defaultEncoding">UTF-8</prop> </props> </property> </bean> <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" /> <!-- View resolvers can also be configured with ResourceBundles or XML files. If you need different view resolving based on Locale, you have to use the resource bundle resolver. --> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="exposeRequestAttributes" value="true" /> <property name="exposeSessionAttributes" value="true" /> <property name="exposeSpringMacroHelpers" value="true" /> <property name="contentType" value="text/html;charset=UTF-8" /> <property name="cache" value="true" /> <property name="prefix" value="" /> <property name="suffix" value=".jsp" /> </bean>
applicationContext.xml
<!-- 读取配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> <value>classpath:application.properties</value> </list> </property> </bean> <bean id="parentDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> </bean> <bean id="oracleDataSource1" parent="parentDataSource"> <property name="driverClassName" value="${jdbc1.driver}"></property> <property name="url" value="${jdbc1.url}"></property> <property name="username" value="${jdbc1.username}"></property> <property name="password" value="${jdbc1.password}"></property> </bean> <bean id="oracleDataSource2" parent="parentDataSource"> <property name="driverClassName" value="${jdbc2.driver}"></property> <property name="url" value="${jdbc2.url}"></property> <property name="username" value="${jdbc2.username}"></property> <property name="password" value="${jdbc2.password}"></property> </bean> <bean id="dataSource" class="com.trac.dao.datasource.DataSources"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry value-ref="oracleDataSource1" key="ORACLE1"></entry> <entry value-ref="oracleDataSource2" key="ORACLE2"></entry> </map> </property> <property name="defaultTargetDataSource" ref="oracleDataSource1"></property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 创建SqlSessionFactory,同时指定数据源和mapper --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath*:com/trac/ibatis/dbcp/*.xml" /> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.trac.dao" /> </bean>
配置 parentDataSource 的父bean.再配置多个数据源继承这个父bean,对driverClass,url,username,password,等数据源连接参数进行各自的重写。例如 oracleDataSource1,在 DataSources bean中注入所有要切换的数据源,并且设置默认的数据源。
DataSourceInstances.java
/** * 定义数据源的标识, 和applicationContext.xml中 DataSources 的 targetDataSources 的key对应 */ public class DataSourceInstances{ public static final String ORACLE1="ORACLE1"; public static final String ORACLE2="ORACLE2"; }
DataSourceSwitch.java
public class DataSourceSwitch{ private static final ThreadLocal contextHolder=new ThreadLocal(); /** * @Description: 设置数据源类型 * @param dataSourceType 数据库类型 * @return void * @throws */ public static void setDataSourceType(String dataSourceType){ contextHolder.set(dataSourceType); } /** * @Description: 获取数据源类型 * @param * @return String * @throws */ public static String getDataSourceType(){ return (String) contextHolder.get(); } /** * @Description: 清除数据源类型 * @param * @return void * @throws */ public static void clearDataSourceType(){ contextHolder.remove(); } }
DataSources.java
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; /** *配置于applicationContext 中,线程局部变量ThreadLocal contextHolder 保存当前需要的数据源类型,当 DataSourceSwitch. setDataSourceType(DataSourceInstances.XXX) 保存当前需要的数据源类型的时候,DataSources 会从当前线程中查找线程变量的数据源类型,从而决定使用何种数据源 */ public class DataSources extends AbstractRoutingDataSource{ @Override protected Object determineCurrentLookupKey() { return DataSourceSwitch.getDataSourceType(); } }
本文转载自: http://blog.csdn.net/l1028386804/article/details/48163279
http://blog.csdn.net/gaofuqi/article/details/46417281
感谢这两位大神的文章帮我了很大的忙,希望可以帮到各位