1. 程式人生 > >javaweb專案配置多資料庫

javaweb專案配置多資料庫

專案結構:

配置檔案:applicationContext.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"  
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xmlns:websocket="http://www.springframework.org/schema/websocket"
    xmlns:security="http://www.springframework.org/schema/security"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/aop   
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/security   
        http://www.springframework.org/schema/security/spring-security-3.2.xsd  
        http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/data/jpa   
        http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd  
        http://www.springframework.org/schema/tx   
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd">  
    
    <!-- 資料庫配置檔案位置 -->  
    <context:property-placeholder location="classpath:/jdbc.properties" />  
    <context:component-scan base-package="com.cn" /> 
    
    <!-- 配置c3p0資料來源 -->  
    <bean id="parentDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${jdbc.driverClassName}" />
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}" />
		<property name="initialPoolSize" value="${c3p0.initialPoolSize}" />
		<property name="maxPoolSize" value="${c3p0.maxPoolSize}" />
		<property name="minPoolSize" value="${c3p0.minPoolSize}" />
		<property name="maxStatements" value="${c3p0.maxStatements}" />
		<property name="testConnectionOnCheckin" value="false" />
		<property name="acquireRetryAttempts" value="5" />
		<property name="acquireRetryDelay" value="2000" />
		<property name="breakAfterAcquireFailure" value="false" />
	</bean>  
  	
  	<bean id="localDataSource" parent="parentDataSource">
        <property name="jdbcUrl" value="${jdbc.url}"></property>
    </bean>
    <bean id="cnccDataSource" parent="parentDataSource">
        <property name="jdbcUrl" value="${jdbc.url1}"></property>
    </bean>
  	
  	<bean id="dataSource" class="com.cn.dynamicDS.DynamicDataSource">
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <entry value-ref="localDataSource" key="local"></entry>
                <entry value-ref="cnccDataSource" key="cncc"></entry>
            </map>
        </property>
        <property name="defaultTargetDataSource" ref="cnccDataSource"></property>
    </bean>
  
    <!-- 使用JDBC事物 -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  
	<!-- 使用annotation註解方式配置事務   -->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
  
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <property name="configLocation" value="classpath:sqlMapConfig.xml"></property> 
    </bean>  
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">  
        <constructor-arg index="0" ref="sqlSessionFactory" />  
    </bean>

</beans>  
jdbc.properties:
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:例項名
jdbc.username=使用者名稱
jdbc.password=密碼
jdbc.url1=jdbc:oracle:thin:@192.168.42.147:1521:第二個資料庫例項名
#也可配置其他資料庫

c3p0.initialPoolSize=10
c3p0.maxPoolSize=10
c3p0.minPoolSize=10
c3p0.maxStatements=10
常量類:
package com.cn.cncc.dynamicDS;

/**
 * 常量類
 * @author hjr
 *
 */
public class DataSourceConst {
	/*
	 * 操作本地資料庫
	 */
    public static final String LOCAL = "local";
    /*
     * 操作BMC遠端資料庫
     */
    public static final String CNCC = "cncc";
}
動態資料來源:
package com.cn.cncc.dynamicDS;

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

/**
 * 動態資料來源
 * @author hjr
 *
 */
public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        // TODO Auto-generated method stub
        return DataSourceContextHolder.getDataSourceType();
    }

}
資料來源動態切換方法類:
package com.cn.cncc.dynamicDS;

/**
 * 資料來源切換方法類
 * @author hjr
 *
 */
public class DataSourceContextHolder {

    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();//執行緒本地環境
    
    //設定資料來源型別
    public static void  setDataSourceType(String dataSourceType)
    {
        contextHolder.set(dataSourceType);
    }
    
    //獲取資料來源型別
    public static String getDataSourceType()
    {
        return contextHolder.get();
    }
    
    //清除資料來源型別
    public static void clearDataSourceType()
    {
        contextHolder.remove();
    }
}
測試類:
package test;

import java.io.BufferedReader;
import java.math.BigDecimal;
import java.sql.Clob;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.cn.cncc.dynamicDS.DataSourceConst;
import com.cn.cncc.dynamicDS.DataSourceContextHolder;
import com.cn.cncc.service.CpuService;



public class dyanmicDataSourceTest {
	
    
	Logger log = Logger.getLogger(dyanmicDataSourceTest.class);

    private CpuService cpuServiceImpl;

	@Before
	public void before(){
		
		ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext-servlet.xml","classpath:applicationContext.xml"});

		cpuServiceImpl = (CpuService)context.getBean("cpuServiceImpl");

	}
	
	@Test
	public void cpuTest(){
		String dataSourceType = DataSourceContextHolder.getDataSourceType();//當前資料庫
		System.out.println(dataSourceType);
		List<Object> findcpu = cpuServiceImpl.findCpuTop5();
		if(null != findcpu && findcpu.size()>0){
			try {
				DataSourceContextHolder.setDataSourceType(DataSourceConst.LOCAL);//切換資料庫
				int insertcpu = cpuServiceImpl.insertCpuTop5(findcpu);//在另一個數據庫查詢
				String dataSourceType2 = DataSourceContextHolder.getDataSourceType();
				System.out.println(dataSourceType2);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	
}





相關推薦

javaweb專案配置資料庫

專案結構: 配置檔案:applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema

jeesite專案使用-資料庫配置【Spring mvc + Mybatis】

jeesite開源專案使用-多資料庫配置【Spring + Mybatis】 配置DataSource多資料來源 使用場景: 同一個專案涉及多個數據庫,既多資料來源的情況。一般有兩種情況: 1。兩個資料庫沒有關係,各自獨立,只是獨立使用,並

MySql解壓版安裝&配置資料庫&主從分離

基於windows作業系統,筆者使用MySql5.5,安裝目錄D:\tools。 安裝解壓版MySql步驟 1、解壓檔案到目錄(D:\tools\MySql5.5_Main),作為主資料庫。 2、配置環境變數 建立使用者變數 新增系統變數,Path中新增(;%MYSQL

vue專案配置入口出口——方法一

問題引入: 在vue專案中,我們通常使用vue-cli腳手架生成專案,生成的是一個單頁面的工程,main.js是整個專案唯一的入口,整個專案都在一個index.html檔案中。 但是,有時候,這種預設結構不能滿足專案需要 大專案使用單頁面負載過重 多頁面利於模組獨立部署

spring boot專案配置個環境

比如我的spring boot專案有開發(dev)、測試(test)、生產(prod)三個環境,需要有三套對應的配置檔案。如下 在專案裡application.yml為主配置檔案,另外三個分別對應

vue-cli專案配置環境

vue-cli 專案配置多環境 vue-cli 預設只提供了 dev 和 prod 兩種環境。但其實正真的開發流程可能還會多一個 sit 或者 stage 環境, 就是所謂的測試環境和預釋出環境。所以我們就要簡單的修改一下程式碼。其實很簡單就是設定不同的環境變數 詳細操作過程 1.在 package.json

Spring + Mybatis配置資料庫

目前有兩種思路: 1.動態切換資料來源,需要自定義一個數據源類繼承自AbstractRoutingDataSource抽象類,這種方式有弊端,如果是併發系統中,當你把資料來源改了,系統中所有的操作資料來源都改了,即使你立馬再改回去,還是有風險; 2.建立兩套資料來源,在sp

vue專案配置入口出口——方法二

問題引入: 在vue專案中,我們通常使用vue-cli腳手架生成專案,生成的是一個單頁面的工程,main.js是整個專案唯一的入口,整個專案都在一個index.html外殼中。 但是,有時候,這種預設結構不能滿足專案需要 大專案使用單頁面負載過重 多頁面利於模組獨立部署

javaWeb專案配置log4j

前段時間由於需要將專案部署到伺服器,由於習慣了列印到控制檯DEBUG追蹤,部署到伺服器後發現光關控制檯資訊很難追蹤到問題所在,並且控制檯還不能複製列印的資訊,所以下定決心自己將專案的日誌輸出到自己能夠

springboot專案配置環境打包部署遇到的問題總結

因為專案用到了多個環境,springboot專案在打包的時候要根據環境進行初始化相關設定,因此需要在pom檔案中配置多環境變數 pom配置檔案如下: <profiles> <profile>

javaweb專案連線MySQL資料庫

1.下載jar包並把jar包放到WebRoot/WEB-INF/lib/下:mysql-connector-java-5.1.27.jar(百度一搜有好多),mysql-connector-java-5.1.27.jar2.載入驅動//com.MySQL.jdbc.Drive

Maven專案配置個原始檔夾

需求Maven 為我們提供了一致的專案目錄配置(原始檔夾、資原始檔夾等),在自動構建專案時, Maven 會按照這個配置來執行操作(編譯原始檔、拷貝資原始檔)。 當 Maven 規約的預設配置不能夠滿足我們的需求時,我們就要動手修改專案的 Maven 配置,讓我們的專案能夠與 Maven 很好地協同工作。這裡

從零使用docker簡單部署一個javaweb專案與mysql資料庫

centos 7 安裝docker:  Docker 要求 CentOS 系統的核心版本高於 3.10 ,檢視本頁面的前提條件來驗證你的CentOS 版本是否支援 Docker 。使用  uname -r 檢視CentOS核心使用 root 許可權登入 Centos。確保 y

Spring+mybatis 使用註解配置資料庫源,支援讀寫分離

第一步:建立一個DynamicDataSource的類,繼承AbstractRoutingDataSource並重寫determineCurrentLookupKey方法,程式碼如下: package spring; import org.springframework

linux系統Amoeba+MySL主從讀寫分離配置 javaweb專案配置連線資料來源

使用amoeba依賴於java環境,首先要安裝jdk、其次是配置資料庫的主從複製,搭建amoeba配置讀寫的資料庫服務 mysql配置主從可參考 http://blog.csdn.net/liqi_q/article/details/78542581 jdk安裝可參考 h

idea 普通javaweb專案配置tomcat啟動

1.匯入專案 使用idea——File——Open匯入專案,選擇普通專案 2.配置專案 點選File——project structure,選擇project,選擇sdk和對應的language

Git本地專案配置個遠端倉庫

目錄 Git一個專案多個遠端倉庫的使用 本地專案配置多個遠端倉庫 現在專案中有一個需求就是一個專案需要推送到多個遠端倉庫。 首先在工作目錄開啟git-bash 然後輸入git rem

Tomcat8配置個埠訪問各埠對應的JavaWeb專案

背景:最近遇到個專案部署的小要求:一個tomcat下配置多個埠去訪問埠對應的JavaWeb專案原理:tomcat中conf下server.xml檔案中的service節點即可配置tomcat的埠號及對應的專案配置步驟:1.開啟tomcat下conf資料夾中的serve.xml

javaweb spring專案升級環境部署問題

javaweb spring專案,由於開發中往往有各種各樣的環境 dev開發環境, test測試環境 pro生產環境,打war包,改各種各樣的配置,首先application.properties中 spring.profiles.active=dev可以指定對應的環境,application-

Maven專案中oracle資料庫連線不上(已經在pom檔案中配置jdbc驅動檔案)

在Maven專案中配置資料庫連線的過程中,出現java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver: 但是檢查了很久都沒有發現哪裡出現錯誤,該配置的都配置了,然後在百度找了一下,發現是oracle版本不同造成的: 參