這個基於Spring的對數據源定時任務項目,從2015年11月份產生想法到現在已經過了半年了。起初想着開發這個項目是因爲公司業務需要,其實之前公司有人開發過一個相同功能的項目。但是項目結構雜亂,同時開發的人員太多,導致代碼特別的混亂,甚至業務都不能正常的運行。所以,在接觸到那個項目之後自己就起了自己搭建並開發的想法,到現在已經更新到第三個版本了。下面會先大致的介紹下項目用到的幾個關鍵的技術,已經用到的部分。
- MAVEN
項目jar的管理是用的maven,這個是我剛接觸工作業務的時候用到的管理,一直覺得很好用,配置簡單,jar再也不用自己下載。基本比分之九十九的jar都能下載到,但是有很少一部分下載不了,比如連接Oracle數據庫的jar,這個時候就需要自己在網上下載之後,手動導入到本地庫中。具體的方法見Maven導入本地jar - Spring
Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由OP)。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式) 輕量級開源框架。 這個就不多介紹了,大家都知道的。 - Druid
Druid是一個JDBC組件,它包括三部分:
1、DruidDriver 代理Driver,能夠提供基於Filter-Chain模式的插件體系。
2、DruidDataSource 高效可管理的數據庫連接池。
3、SQLParser
阿里開發的,有興趣的話,Druid GitHub中文地址
至於項目的搭建,大致的步驟就是,新建maven項目,然後maven項目轉web項目。(具體的操作方法,這裏就不詳細的介紹了),下面粘貼上pom.xml。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ewidewater</groupId>
<artifactId>synchroInfo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.19</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
</project>
下面的重點就是多數據源的編碼了,下面先附上
DynamicDataSource.java
DataSourceContextHolder.java
DataSourceConst.java
具體的每個類的用途,在代碼間都有相關的解釋
package com.ewidewater.util;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
/**
* 重寫一個動態數據源的類,繼承Spring
* AbstractRoutingDataSource類,並且實現determineCurrentLookupKey()方法。
* 看determineCurrentLookupKey()方法的註釋,意思大致就是決定當前數據源的key。
*
* @author Administrator
*
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDateSourceType();
}
}
package com.ewidewater.util;
public class DataSourceContextHolder {
/**
* 爲了線程安全,設置每個線程單獨的變量
*/
private static final ThreadLocal contextHolder = new ThreadLocal();
/**
* @Description:設置當前數據源的key
* @param
* @return void
*
* @author wang_yw )_)
* @date:2016年6月3日
*/
public static void setDataSourseType(String dataSourceType){
contextHolder.set(dataSourceType);
}
/**
* @Description:獲取當前數據源的key
* @param
* @return String
*
* @author wang_yw )_)
* @date:2016年6月3日
*/
public static String getDateSourceType(){
return (String)contextHolder.get();
}
/**
* @Description:清除當前數據源的key
* @param
* @return void
*
* @author wang_yw )_)
* @date:2016年6月3日
*/
public static void clearDataSourceType(){
contextHolder.remove();
}
}
package com.ewidewater.util;
/**
* 數據源常量
* @author wang_yw (_(
*/
public class DataSourceConst {
public final static String one = "one";
public final static String two = "two";
}
今天太晚了,就不接着詳細介紹了,這裏有一個簡單的項目Demo,大家有興趣的話,可以下載運行。有疑問的或者更好的建議的話,歡迎留言,或者郵箱[email protected],有用的話記得給個評分哦~
下載地址:Demo下載地址
項目JDK1.8,1.7也是可以運行的,編譯的時候修改下就行了。