基于Spring的多数据源(Druid)定时任务项目开发(一)<带Demo>

来源:互联网 发布:淘宝一件代发供货平台 编辑:程序博客网 时间:2024/05/29 16:41
这个基于Spring的对数据源定时任务项目,从2015年11月份产生想法到现在已经过了半年了。起初想着开发这个项目是因为公司业务需要,其实之前公司有人开发过一个相同功能的项目。但是项目结构杂乱,同时开发的人员太多,导致代码特别的混乱,甚至业务都不能正常的运行。所以,在接触到那个项目之后自己就起了自己搭建并开发的想法,到现在已经更新到第三个版本了。下面会先大致的介绍下项目用到的几个关键的技术,已经用到的部分。
  1. MAVEN
    项目jar的管理是用的maven,这个是我刚接触工作业务的时候用到的管理,一直觉得很好用,配置简单,jar再也不用自己下载。基本比分之九十九的jar都能下载到,但是有很少一部分下载不了,比如连接Oracle数据库的jar,这个时候就需要自己在网上下载之后,手动导入到本地库中。具体的方法见Maven导入本地jar
  2. Spring
    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由OP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。 这个就不多介绍了,大家都知道的。
  3. 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,大家有兴趣的话,可以下载运行。有疑问的或者更好的建议的话,欢迎留言,或者邮箱wdssdream@163.com,有用的话记得给个评分哦~
下载地址:Demo下载地址
项目JDK1.8,1.7也是可以运行的,编译的时候修改下就行了。

2 0