javaweb專案配置多資料庫
專案結構:
配置檔案:applicationContext.xml
jdbc.properties:<?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.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版本不同造成的: 參