spring mvc+mybatis多数据源的配置和使用

3.6工作日志:

1.因为开始并不知道需要多个数据源,所有就是单纯的用的Mysql。

<context:annotation-config />
    <context:component-scan base-package="com.test"/>
   
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:mysql://${db.host}/adtarget?characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull</value>
        </property>
        <property name="username">
            <value>${db.user}</value>
        </property>
        <property name="password">
            <value>${db.password}</value>
        </property>
    </bean>
   
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
    </bean>
     

    <!-- scan for mappers and let them be autowired -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.test.model.persistence" />
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
    注入主要就是用的Spring的注解,@Autowired,@Service。

 

2.后来提了新需求,要根据MySQL数据库中表的一个字段,从另一台服务器上的Sql server查询数据,所有开始查找多数据源的解决方案。最简单的方法就是跨服务器查询,可惜MySQL不支持跨服务器查询,这个行不通。

3.配置sqlServer的数据源
   
<bean id="appSqlDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
     <property name="url" value="${db.appUrl};DatabaseName=${db.appDBname}"/>
     <property name="username" value="${db.appUser}"/>
     <property name="password" value="${db.appPwd}"/>
</bean>
<bean id="appServ" class="com.test.AppMediaService">
     <property name="dataSource" ref="appSqlDataSource"/>
</bean> 

    4.直接在Service中使用第二个数据源,service实现类AppMediaService继承JdbcDaoSupport这个类,然后类中就可以通过直接调用getJdbcTemplate().XXX来执行需要的方法。

public class AppMediaService extends JdbcDaoSupport implements Service{
	private String tableName = "\"appjoy_traffic\".\"dbo\".\"App_Details\"";
        public AppMedia getAppMediaByPkg(final String pkg){
		
		String sql = "SELECT top 1 id,app_name,app_icon,app_desc,app_version,package_size FROM "
			+ tableName+ " WHERE market_package = ?";
		return getJdbcTemplate().queryForObject(sql, new AppMediaRowMapper(), pkg);
	}
}

你可能感兴趣的:(spring,mvc+mybatis多数据源)