spring + mybatis 同時連線多個數據源
阿新 • • 發佈:2019-01-29
本文所述是,在一個Spring+mybatis的工程內,需要連線oracle+sqlserver(兩個不同的sqlserver資料庫)。
直接提供配置檔案
xml看上去可能比較亂,整體思路就是,工程內配置三套,包括service和dao都是各自路徑。這樣雖然路徑比較多,但感覺程式碼管理起來比較清晰。以上方式親測有效。<!--<!– 自動掃描 –>--> <context:component-scan base-package="com.test1"/> <context:component-scan base-package="com.test2"/> <context:component-scan base-package="com.test3"/> <!--<!– 監聽資料庫方法配置 –>--> <bean id="test1Service" class="com.test1.service.Test1Service" init-method="findList"/> <bean id="test2Service" class="com.test2.service.Test2Service" init-method="findList"/> <bean id="test3Service" class="com.test3.service.Test3Service" init-method="findList"/> <!-- 第二種方式:載入多個properties檔案 --> <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> <property name="fileEncoding" value="UTF-8"/> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <property name="properties" ref="configProperties"/> </bean> <!--<!–oracle配置資料來源–>--> <bean id="dataSource_oracle" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driverClasss}"/> <property name="url" value="${jdbcUrl}"/> <property name="username" value="test1"/> <property name="password" value="test1"/> <!-- 初始化連線大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 連線池最大數量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 連線池最大空閒 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 連線池最小空閒 --> <property name="minIdle" value="${minIdle}"></property> <!-- 獲取連線最大等待時間 --> <property name="maxWait" value="${maxWait}"></property> </bean> <!-- mybatis和spring完美整合,不需要mybatis的配置對映檔案 --> <bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_oracle"/> <!-- 自動掃描mapping.xml檔案 --> <property name="mapperLocations" value="classpath:mapping/test1/*.xml"></property> </bean> <!-- DAO介面所在包名,Spring會自動查詢其下的類 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test1.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory1"></property> </bean> <!--(事務管理)transaction manager, use JtaTransactionManager for global tx--> <bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource_oracle"/> </bean> <!-- (事務管理)transaction manager, use JtaTransactionManager for global tx --> <tx:annotation-driven transaction-manager="transactionManager1"/> <!--sqlserver配置資料來源--> <bean id="dataSource_sq1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${sq1DriverClasss}"/> <property name="url" value="${sq1JdbcUrl}"/> <property name="username" value="${sq1Username}"/> <property name="password" value="${sq1Password}"/> <!-- 初始化連線大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 連線池最大數量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 連線池最大空閒 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 連線池最小空閒 --> <property name="minIdle" value="${minIdle}"></property> <!-- 獲取連線最大等待時間 --> <property name="maxWait" value="${maxWait}"></property> </bean> <!-- mybatis和spring完美整合,不需要mybatis的配置對映檔案 --> <bean id="sqlSessionFactorySq1" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_sq1"/> <!-- 自動掃描mapping.xml檔案 --> <property name="mapperLocations" value="classpath:mapping/test2/*.xml"></property> </bean> <!-- DAO介面所在包名,Spring會自動查詢其下的類 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test2.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactorySq1"></property> </bean> <!--(事務管理)transaction manager, use JtaTransactionManager for global tx--> <bean id="transactionManagerSq1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource_sq1"/> </bean> <!-- (事務管理)transaction manager, use JtaTransactionManager for global tx --> <tx:annotation-driven transaction-manager="transactionManagerSq1"/> <!--sqlserver配置資料來源--> <bean id="dataSource_invt" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${sq2DriverClasss}"/> <property name="url" value="${sq2JdbcUrl}"/> <property name="username" value="${sq2Username}"/> <property name="password" value="${sq2Password}"/> <!-- 初始化連線大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 連線池最大數量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 連線池最大空閒 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 連線池最小空閒 --> <property name="minIdle" value="${minIdle}"></property> <!-- 獲取連線最大等待時間 --> <property name="maxWait" value="${maxWait}"></property> </bean> <!--mybatis和spring完美整合,不需要mybatis的配置對映檔案--> <bean id="sqlSessionFactorySq2" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_sq2"/> <!-- 自動掃描mapping.xml檔案 --> <property name="mapperLocations" value="classpath:mapping/test3/*.xml"></property> </bean> <!-- DAO介面所在包名,Spring會自動查詢其下的類 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test3.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactorySq2"></property> </bean> <!--(事務管理)transaction manager, use JtaTransactionManager for global tx--> <bean id="transactionManagerSq2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource_sq2"/> </bean> <!--(事務管理)transaction manager, use JtaTransactionManager for global tx--> <tx:annotation-driven transaction-manager="transactionManagerSq2"/>