雙數據源配置(一個項目中鏈接兩個數據庫)


resin文件配置(我用的resin,其他的可自行配置)
<database>
	<jndi-name>jdbc/OracleDB</jndi-name>
	<driver type="oracle.jdbc.driver.OracleDriver">
		<!--<url>jdbc:oracle:thin:@oa.paipai580.com:1521:orcl</url>
		<user>cggl</user>
		<password>cggl345#$%</password>-->
		
		 <url>jdbc:oracle:thin:@192.168.1.9:1521:orcl</url>
		<user>ycg</user>
		<password>ycg</password>
		
	</driver>
	<prepared-statement-cache-size>8</prepared-statement-cache-size>
	<max-connections>20</max-connections>
	<max-idle-time>30s</max-idle-time>
    </database>
    
      <database>
	<jndi-name>jdbc/mysqlDB</jndi-name>
	<driver type="com.mysql.jdbc.Driver">
		<url>jdbc:mysql://39.98.47.52:3306/dev-idr</url>
		<user>admin</user>
		<password>mySteel2019,!@#</password>
		
	</driver>
	<prepared-statement-cache-size>8</prepared-statement-cache-size>
	<max-connections>20</max-connections>
	<max-idle-time>30s</max-idle-time>
    </database>

1.  然后寫一個數據源持有類:

package org.thcic.ejw.components.datatable;

public class DataSourceHolder {
	private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    /**
     * @Description: 設置數據源類型
     * @param dataSourceType  數據庫類型
     * @return void
     * @throws
     */
    public static void setDataSourceType(String dataSourceType) {
        contextHolder.set(dataSourceType);
    }

    /**
     * @Description: 獲取數據源類型
     * @return String
     * @throws
     */
    public static String getDataSourceType() {
        return contextHolder.get();
    }

    /**
     * @Description: 清除數據源類型
     * @return void
     * @throws
     */
    public static void clearDataSourceType() {
        contextHolder.remove();
    }


}

  2. 寫一個數據源路由類

package org.thcic.ejw.components.datatable;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class RoutingDataSource extends AbstractRoutingDataSource {

	@Override
	protected Object determineCurrentLookupKey() {
		
		return DataSourceHolder.getDataSourceType();
	}
 
}

  

3. 配置數據源路由

<!--配置數據源路由-->
    <bean id="dataSource" class="org.thcic.ejw.components.datatable.RoutingDataSource">
        <!-- 為targetDataSources注入兩個數據源 -->
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <entry key="orcleDb" value-ref="orclDataSource"/>
                <entry key="mysqlDb" value-ref="mysqlDataSource"/>
            </map>
        </property>
        <!-- 為指定數據源RoutingDataSource注入默認的數據源-->
        <property name="defaultTargetDataSource" ref="orclDataSource"/>
    </bean>

 

4. spring整合

<!--hibernate start-->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${dataSource.hibernate.dialect}</prop>
				<prop key="hibernate.connection.useUnicode">true</prop>
				<prop key="hibernate.connection.characterEncoding">utf-8</prop>
				<prop key="hibernate.show_sql">${dataSource.hibernate.show_sql}</prop>
				<prop key="hibernate.jdbc.fetch_size">50</prop>
			</props>
		</property>
		<property name="packagesToScan">  
			<list>  
				<value>org.thcic.ejw.sys.vo</value>  
				<value>org.thcic.ejw.purchase.setting.vo</value>  
				<value>org.thcic.ejw.purchase.inquiry.vo</value>
				<value>org.thcic.ejw.purchase.notice.vo</value>  
				<value>org.thcic.ejw.purchase.bid.vo</value>
				<value>org.thcic.ejw.purchase.report.vo</value>  
            </list> 
        </property>
	</bean>

  

5.雙jdbcTemplate配置

<!--jdbcTemplate start-->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
        lazy-init="false" autowire="default" >
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <bean id="mysqlJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
        lazy-init="false" autowire="default" >
        <property name="dataSource" ref="mysqlDataSource"></property>
    </bean>

  

6.使用數據源

/*jdbcTemplate的使用*/
@Autowired
    @Qualifier("oracleJdbcTemplate")
    private JdbcTemplate dbTwojdbcTemplate;

    @Autowired
    @Qualifier("mysqlJdbcTemplate")
    private JdbcTemplate dbOneJdbcTemplate;


/*數據源切換*/
//獲取數據源類型
DataSourceHolder.getDataSourceType();
//設置為 db1 的數據源
DataSourceHolder.setDataSourceType("db1");
//設置為 db2 的數據源
DataSourceHolder.setDataSourceType("db2");

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM