DRUID配置多数据源项目

/**   
* @Title: DruidStatViewServlet.java 
* @Package org.spring.springboot.servlet 
* @Description: TODO(用一句话描述该文件做什么) 
* @author pengfei   
* @date 2017年7月15日 下午3:28:13 
* @version V1.0   
*/
package org.spring.springboot.servlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

import com.alibaba.druid.support.http.StatViewServlet;

/**
 * StatViewServlet
 *
 * @author 单红宇(365384722)
 * @myblog http://blog.csdn.net/catoop/
 * @create 2016年3月17日
 */
@SuppressWarnings("serial")
@WebServlet(urlPatterns = "/druid/*", 
    initParams={
            @WebInitParam(name="allow",value="192.168.16.110,127.0.0.1"),// IP白名单 (没有配置或者为空,则允许所有访问)
            @WebInitParam(name="deny",value="192.168.16.111"),// IP黑名单 (存在共同时,deny优先于allow)
            @WebInitParam(name="loginUsername",value="admin"),// 用户名
            @WebInitParam(name="loginPassword",value="123456"),// 密码
            @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
    })
public class DruidStatViewServlet extends StatViewServlet{
}

关于DRUID配置多数据源相信您在网上也找到不少文章,每个人方法各有不同,供大道同归,原理都是一样的;

介绍:

Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以通过定制来实现自己需要的功能。

个人理解:主要实现了数据源的优化,和对SQL的监控功能,对事务的管理还是解决JDBC 或 JTA那套来管理事务,我还是参照网上的JDBC事务。

我主要采用spring boot+druid配置数据源,包括事务的管理。
这是我对新技术采用的方法,应该可以放大图片来看:


图上链接我给大家发下,也有可能会失效,因为随网站内容变更啊

同类技术对比:https://github.com/alibaba/druid/wiki/%E5%90%84%E7%A7%8D%E8%BF%9E%E6%8E%A5%E6%B1%A0%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94%E6%B5%8B%E8%AF%95

官方示例:http://www.iteye.com/magazines/90#123 只是管理了链接池

文档:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

看开源代码:https://github.com/AlibabaTech/druid



我直接写配置方法了:

application.properties

## master 数据源配置
master.datasource.url=jdbc:oracle:thin:@10.20.100.193:1521:mestest1
master.datasource.username=qnmest1
master.datasource.password=qnmest1
master.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

## cluster 数据源配置
cluster.datasource.url=jdbc:mysql://localhost:3306/springbootdb_cluster?useUnicode=true&characterEncoding=utf8
cluster.datasource.username=root
cluster.datasource.password=root
cluster.datasource.driverClassName=com.mysql.jdbc.Driver


# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒 
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.logImpl=STDOUT_LOGGING
# 打开PSCache,并且指定每个连接上PSCache的大小 
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true


logback.access.config.path=./src/main/respirces/logback.xml


MasterDataSourceConfig

package org.spring.springboot.config.ds;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {

    // 精确到 master 目录,以便跟其他数据源隔离
    static final String PACKAGE = "org.spring.springboot.dao.master";
    static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";

    @Value("${master.datasource.url}")
    private String url;

    @Value("${master.datasource.username}")
    private String user;

    @Value("${master.datasource.password}")
    private String password;

    @Value("${master.datasource.driverClassName}")
    private String driverClass;

    @Bean(name = "masterDataSource")
    @Primary
    public DataSource masterDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
  
        return dataSource;
    }

    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(masterDataSource());
    }

    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MasterDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

ClusterDataSourceConfig

package org.spring.springboot.config.ds;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = ClusterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "clusterSqlSessionFactory")
public class ClusterDataSourceConfig {
	// 精确到 cluster 目录,以便跟其他数据源隔离
	static final String PACKAGE = "org.spring.springboot.dao.cluster";
	static final String MAPPER_LOCATION = "classpath:mapper/cluster/*.xml";

	@Value("${cluster.datasource.url}")
	private String url;

	@Value("${cluster.datasource.username}")
	private String user;

	@Value("${cluster.datasource.password}")
	private String password;

	@Value("${cluster.datasource.driverClassName}")
	private String driverClass;

	@Bean(name = "clusterDataSource")
	public DataSource clusterDataSource() {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setDriverClassName(driverClass);
		dataSource.setUrl(url);
		dataSource.setUsername(user);
		dataSource.setPassword(password);
		return dataSource;
	}

	@Bean(name = "clusterTransactionManager") //这里就是事务控制了
	public DataSourceTransactionManager clusterTransactionManager() {
		return new DataSourceTransactionManager(clusterDataSource());
	}

	@Bean(name = "clusterSqlSessionFactory")
	public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("clusterDataSource") DataSource clusterDataSource)
			throws Exception {
		final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		sessionFactory.setDataSource(clusterDataSource);
		sessionFactory.setMapperLocations(
				new PathMatchingResourcePatternResolver().getResources(ClusterDataSourceConfig.MAPPER_LOCATION));
		return sessionFactory.getObject();
	}
}

IntfCalculateZpfMapper

package org.spring.springboot.dao.master;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.spring.springboot.domain.IntfCalculateZpf;

public interface IntfCalculateZpfMapper {
    int deleteByPrimaryKey(Date sysid);

    int insert(IntfCalculateZpf record);

    int insertSelective(IntfCalculateZpf record);

    IntfCalculateZpf selectByPrimaryKey(Date sysid);
    List<IntfCalculateZpf> selectBySid(BigDecimal sid);

    int updateByPrimaryKeySelective(IntfCalculateZpf record);

    int updateByPrimaryKey(IntfCalculateZpf record);
    
    
}
IntfCalculateZpfMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.spring.springboot.dao.master.IntfCalculateZpfMapper" >
  <resultMap id="BaseResultMap" type="org.spring.springboot.domain.IntfCalculateZpf" >
    <constructor >
      <idArg column="SYSID" jdbcType="TIMESTAMP" javaType="java.util.Date" />
      <arg column="SID" jdbcType="DECIMAL" javaType="java.math.BigDecimal" />
      <arg column="APPLY_ID" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="CAR_NO" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="L4_MATNR" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="MAT_NAME" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="PRICE_UNIT" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="GROSS_WT" jdbcType="DECIMAL" javaType="java.math.BigDecimal" />
      <arg column="GROSS_DATE" jdbcType="TIMESTAMP" javaType="java.util.Date" />
      <arg column="TARE_WT" jdbcType="DECIMAL" javaType="java.math.BigDecimal" />
      <arg column="TARE_DATE" jdbcType="TIMESTAMP" javaType="java.util.Date" />
      <arg column="WEIGHT" jdbcType="DECIMAL" javaType="java.math.BigDecimal" />
      <arg column="WT_UNIT" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="GROSS_BY" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="BUSINESS_ID" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="BUSINESS_TYPE" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="APPLY_ID_L2" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="SUPPLY_NAME" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="GROSS_DATE_2" jdbcType="TIMESTAMP" javaType="java.util.Date" />
      <arg column="GROSS_DATE_1" jdbcType="TIMESTAMP" javaType="java.util.Date" />
      <arg column="GROSS_STATION_1" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="LADLE_SEQ" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="CELL_ID_LIST" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="ASSIGNMENT" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="UNIT_CARRIED_NAME" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="REMARK" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="FLAG" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="LADLE_ID" jdbcType="VARCHAR" javaType="java.lang.String" />
    </constructor>
  </resultMap>
  <sql id="Base_Column_List" >
    SYSID, SID, APPLY_ID, CAR_NO, L4_MATNR, MAT_NAME, PRICE_UNIT, GROSS_WT, GROSS_DATE, 
    TARE_WT, TARE_DATE, WEIGHT, WT_UNIT, GROSS_BY, BUSINESS_ID, BUSINESS_TYPE, APPLY_ID_L2, 
    SUPPLY_NAME, GROSS_DATE_2, GROSS_DATE_1, GROSS_STATION_1, LADLE_SEQ, CELL_ID_LIST, 
    ASSIGNMENT, UNIT_CARRIED_NAME, REMARK, FLAG, LADLE_ID
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.util.Date" >
    select 
    <include refid="Base_Column_List" />
    from INTF_CALCULATE_ZPF
    where SYSID = #{sysid,jdbcType=TIMESTAMP}
  </select>
  
  <select id="selectBySid" resultMap="BaseResultMap" parameterType="java.math.BigDecimal" >
    select 
    <include refid="Base_Column_List" />
    from INTF_CALCULATE_ZPF
    where SID = #{sid,jdbcType=DECIMAL}
  </select>
  
  <delete id="deleteByPrimaryKey" parameterType="java.util.Date" >
    delete from INTF_CALCULATE_ZPF
    where SYSID = #{sysid,jdbcType=TIMESTAMP}
  </delete>
  <insert id="insert" parameterType="org.spring.springboot.domain.IntfCalculateZpf" >
    insert into INTF_CALCULATE_ZPF (SYSID, SID, APPLY_ID, 
      CAR_NO, L4_MATNR, MAT_NAME, 
      PRICE_UNIT, GROSS_WT, GROSS_DATE, 
      TARE_WT, TARE_DATE, WEIGHT, 
      WT_UNIT, GROSS_BY, BUSINESS_ID, 
      BUSINESS_TYPE, APPLY_ID_L2, SUPPLY_NAME, 
      GROSS_DATE_2, GROSS_DATE_1, GROSS_STATION_1, 
      LADLE_SEQ, CELL_ID_LIST, ASSIGNMENT, 
      UNIT_CARRIED_NAME, REMARK, FLAG, 
      LADLE_ID)
    values (#{sysid,jdbcType=TIMESTAMP}, #{sid,jdbcType=DECIMAL}, #{applyId,jdbcType=VARCHAR}, 
      #{carNo,jdbcType=VARCHAR}, #{l4Matnr,jdbcType=VARCHAR}, #{matName,jdbcType=VARCHAR}, 
      #{priceUnit,jdbcType=VARCHAR}, #{grossWt,jdbcType=DECIMAL}, #{grossDate,jdbcType=TIMESTAMP}, 
      #{tareWt,jdbcType=DECIMAL}, #{tareDate,jdbcType=TIMESTAMP}, #{weight,jdbcType=DECIMAL}, 
      #{wtUnit,jdbcType=VARCHAR}, #{grossBy,jdbcType=VARCHAR}, #{businessId,jdbcType=VARCHAR}, 
      #{businessType,jdbcType=VARCHAR}, #{applyIdL2,jdbcType=VARCHAR}, #{supplyName,jdbcType=VARCHAR}, 
      #{grossDate2,jdbcType=TIMESTAMP}, #{grossDate1,jdbcType=TIMESTAMP}, #{grossStation1,jdbcType=VARCHAR}, 
      #{ladleSeq,jdbcType=VARCHAR}, #{cellIdList,jdbcType=VARCHAR}, #{assignment,jdbcType=VARCHAR}, 
      #{unitCarriedName,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{flag,jdbcType=VARCHAR}, 
      #{ladleId,jdbcType=VARCHAR})
  </insert>
  <insert id="insertSelective" parameterType="org.spring.springboot.domain.IntfCalculateZpf" >
    insert into INTF_CALCULATE_ZPF
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="sysid != null" >
        SYSID,
      </if>
      <if test="sid != null" >
        SID,
      </if>
      <if test="applyId != null" >
        APPLY_ID,
      </if>
      <if test="carNo != null" >
        CAR_NO,
      </if>
      <if test="l4Matnr != null" >
        L4_MATNR,
      </if>
      <if test="matName != null" >
        MAT_NAME,
      </if>
      <if test="priceUnit != null" >
        PRICE_UNIT,
      </if>
      <if test="grossWt != null" >
        GROSS_WT,
      </if>
      <if test="grossDate != null" >
        GROSS_DATE,
      </if>
      <if test="tareWt != null" >
        TARE_WT,
      </if>
      <if test="tareDate != null" >
        TARE_DATE,
      </if>
      <if test="weight != null" >
        WEIGHT,
      </if>
      <if test="wtUnit != null" >
        WT_UNIT,
      </if>
      <if test="grossBy != null" >
        GROSS_BY,
      </if>
      <if test="businessId != null" >
        BUSINESS_ID,
      </if>
      <if test="businessType != null" >
        BUSINESS_TYPE,
      </if>
      <if test="applyIdL2 != null" >
        APPLY_ID_L2,
      </if>
      <if test="supplyName != null" >
        SUPPLY_NAME,
      </if>
      <if test="grossDate2 != null" >
        GROSS_DATE_2,
      </if>
      <if test="grossDate1 != null" >
        GROSS_DATE_1,
      </if>
      <if test="grossStation1 != null" >
        GROSS_STATION_1,
      </if>
      <if test="ladleSeq != null" >
        LADLE_SEQ,
      </if>
      <if test="cellIdList != null" >
        CELL_ID_LIST,
      </if>
      <if test="assignment != null" >
        ASSIGNMENT,
      </if>
      <if test="unitCarriedName != null" >
        UNIT_CARRIED_NAME,
      </if>
      <if test="remark != null" >
        REMARK,
      </if>
      <if test="flag != null" >
        FLAG,
      </if>
      <if test="ladleId != null" >
        LADLE_ID,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="sysid != null" >
        #{sysid,jdbcType=TIMESTAMP},
      </if>
      <if test="sid != null" >
        #{sid,jdbcType=DECIMAL},
      </if>
      <if test="applyId != null" >
        #{applyId,jdbcType=VARCHAR},
      </if>
      <if test="carNo != null" >
        #{carNo,jdbcType=VARCHAR},
      </if>
      <if test="l4Matnr != null" >
        #{l4Matnr,jdbcType=VARCHAR},
      </if>
      <if test="matName != null" >
        #{matName,jdbcType=VARCHAR},
      </if>
      <if test="priceUnit != null" >
        #{priceUnit,jdbcType=VARCHAR},
      </if>
      <if test="grossWt != null" >
        #{grossWt,jdbcType=DECIMAL},
      </if>
      <if test="grossDate != null" >
        #{grossDate,jdbcType=TIMESTAMP},
      </if>
      <if test="tareWt != null" >
        #{tareWt,jdbcType=DECIMAL},
      </if>
      <if test="tareDate != null" >
        #{tareDate,jdbcType=TIMESTAMP},
      </if>
      <if test="weight != null" >
        #{weight,jdbcType=DECIMAL},
      </if>
      <if test="wtUnit != null" >
        #{wtUnit,jdbcType=VARCHAR},
      </if>
      <if test="grossBy != null" >
        #{grossBy,jdbcType=VARCHAR},
      </if>
      <if test="businessId != null" >
        #{businessId,jdbcType=VARCHAR},
      </if>
      <if test="businessType != null" >
        #{businessType,jdbcType=VARCHAR},
      </if>
      <if test="applyIdL2 != null" >
        #{applyIdL2,jdbcType=VARCHAR},
      </if>
      <if test="supplyName != null" >
        #{supplyName,jdbcType=VARCHAR},
      </if>
      <if test="grossDate2 != null" >
        #{grossDate2,jdbcType=TIMESTAMP},
      </if>
      <if test="grossDate1 != null" >
        #{grossDate1,jdbcType=TIMESTAMP},
      </if>
      <if test="grossStation1 != null" >
        #{grossStation1,jdbcType=VARCHAR},
      </if>
      <if test="ladleSeq != null" >
        #{ladleSeq,jdbcType=VARCHAR},
      </if>
      <if test="cellIdList != null" >
        #{cellIdList,jdbcType=VARCHAR},
      </if>
      <if test="assignment != null" >
        #{assignment,jdbcType=VARCHAR},
      </if>
      <if test="unitCarriedName != null" >
        #{unitCarriedName,jdbcType=VARCHAR},
      </if>
      <if test="remark != null" >
        #{remark,jdbcType=VARCHAR},
      </if>
      <if test="flag != null" >
        #{flag,jdbcType=VARCHAR},
      </if>
      <if test="ladleId != null" >
        #{ladleId,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="org.spring.springboot.domain.IntfCalculateZpf" >
    update INTF_CALCULATE_ZPF
    <set >
      <if test="sid != null" >
        SID = #{sid,jdbcType=DECIMAL},
      </if>
      <if test="applyId != null" >
        APPLY_ID = #{applyId,jdbcType=VARCHAR},
      </if>
      <if test="carNo != null" >
        CAR_NO = #{carNo,jdbcType=VARCHAR},
      </if>
      <if test="l4Matnr != null" >
        L4_MATNR = #{l4Matnr,jdbcType=VARCHAR},
      </if>
      <if test="matName != null" >
        MAT_NAME = #{matName,jdbcType=VARCHAR},
      </if>
      <if test="priceUnit != null" >
        PRICE_UNIT = #{priceUnit,jdbcType=VARCHAR},
      </if>
      <if test="grossWt != null" >
        GROSS_WT = #{grossWt,jdbcType=DECIMAL},
      </if>
      <if test="grossDate != null" >
        GROSS_DATE = #{grossDate,jdbcType=TIMESTAMP},
      </if>
      <if test="tareWt != null" >
        TARE_WT = #{tareWt,jdbcType=DECIMAL},
      </if>
      <if test="tareDate != null" >
        TARE_DATE = #{tareDate,jdbcType=TIMESTAMP},
      </if>
      <if test="weight != null" >
        WEIGHT = #{weight,jdbcType=DECIMAL},
      </if>
      <if test="wtUnit != null" >
        WT_UNIT = #{wtUnit,jdbcType=VARCHAR},
      </if>
      <if test="grossBy != null" >
        GROSS_BY = #{grossBy,jdbcType=VARCHAR},
      </if>
      <if test="businessId != null" >
        BUSINESS_ID = #{businessId,jdbcType=VARCHAR},
      </if>
      <if test="businessType != null" >
        BUSINESS_TYPE = #{businessType,jdbcType=VARCHAR},
      </if>
      <if test="applyIdL2 != null" >
        APPLY_ID_L2 = #{applyIdL2,jdbcType=VARCHAR},
      </if>
      <if test="supplyName != null" >
        SUPPLY_NAME = #{supplyName,jdbcType=VARCHAR},
      </if>
      <if test="grossDate2 != null" >
        GROSS_DATE_2 = #{grossDate2,jdbcType=TIMESTAMP},
      </if>
      <if test="grossDate1 != null" >
        GROSS_DATE_1 = #{grossDate1,jdbcType=TIMESTAMP},
      </if>
      <if test="grossStation1 != null" >
        GROSS_STATION_1 = #{grossStation1,jdbcType=VARCHAR},
      </if>
      <if test="ladleSeq != null" >
        LADLE_SEQ = #{ladleSeq,jdbcType=VARCHAR},
      </if>
      <if test="cellIdList != null" >
        CELL_ID_LIST = #{cellIdList,jdbcType=VARCHAR},
      </if>
      <if test="assignment != null" >
        ASSIGNMENT = #{assignment,jdbcType=VARCHAR},
      </if>
      <if test="unitCarriedName != null" >
        UNIT_CARRIED_NAME = #{unitCarriedName,jdbcType=VARCHAR},
      </if>
      <if test="remark != null" >
        REMARK = #{remark,jdbcType=VARCHAR},
      </if>
      <if test="flag != null" >
        FLAG = #{flag,jdbcType=VARCHAR},
      </if>
      <if test="ladleId != null" >
        LADLE_ID = #{ladleId,jdbcType=VARCHAR},
      </if>
    </set>
    where SYSID = #{sysid,jdbcType=TIMESTAMP}
  </update>
  <update id="updateByPrimaryKey" parameterType="org.spring.springboot.domain.IntfCalculateZpf" >
    update INTF_CALCULATE_ZPF
    set SID = #{sid,jdbcType=DECIMAL},
      APPLY_ID = #{applyId,jdbcType=VARCHAR},
      CAR_NO = #{carNo,jdbcType=VARCHAR},
      L4_MATNR = #{l4Matnr,jdbcType=VARCHAR},
      MAT_NAME = #{matName,jdbcType=VARCHAR},
      PRICE_UNIT = #{priceUnit,jdbcType=VARCHAR},
      GROSS_WT = #{grossWt,jdbcType=DECIMAL},
      GROSS_DATE = #{grossDate,jdbcType=TIMESTAMP},
      TARE_WT = #{tareWt,jdbcType=DECIMAL},
      TARE_DATE = #{tareDate,jdbcType=TIMESTAMP},
      WEIGHT = #{weight,jdbcType=DECIMAL},
      WT_UNIT = #{wtUnit,jdbcType=VARCHAR},
      GROSS_BY = #{grossBy,jdbcType=VARCHAR},
      BUSINESS_ID = #{businessId,jdbcType=VARCHAR},
      BUSINESS_TYPE = #{businessType,jdbcType=VARCHAR},
      APPLY_ID_L2 = #{applyIdL2,jdbcType=VARCHAR},
      SUPPLY_NAME = #{supplyName,jdbcType=VARCHAR},
      GROSS_DATE_2 = #{grossDate2,jdbcType=TIMESTAMP},
      GROSS_DATE_1 = #{grossDate1,jdbcType=TIMESTAMP},
      GROSS_STATION_1 = #{grossStation1,jdbcType=VARCHAR},
      LADLE_SEQ = #{ladleSeq,jdbcType=VARCHAR},
      CELL_ID_LIST = #{cellIdList,jdbcType=VARCHAR},
      ASSIGNMENT = #{assignment,jdbcType=VARCHAR},
      UNIT_CARRIED_NAME = #{unitCarriedName,jdbcType=VARCHAR},
      REMARK = #{remark,jdbcType=VARCHAR},
      FLAG = #{flag,jdbcType=VARCHAR},
      LADLE_ID = #{ladleId,jdbcType=VARCHAR}
    where SYSID = #{sysid,jdbcType=TIMESTAMP}
  </update>
</mapper>


IntfCalculateZpfServiceImpl

/**   
* @Title: IntfCalculateZpfServiceImpl.java 
* @Package org.spring.springboot.service.impl 
* @Description: TODO(用一句话描述该文件做什么) 
* @author pengfei   
* @date 2017年7月15日 上午10:57:54 
* @version V1.0   
*/
package org.spring.springboot.service.impl;

import java.math.BigDecimal;
import java.util.Date;

import org.spring.springboot.dao.master.IntfCalculateZpfMapper;
import org.spring.springboot.domain.IntfCalculateZpf;
import org.spring.springboot.service.IntfCalculateZpfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/** 
 * @author zhangPengFei QQ:635332940 
 * @version 创建时间:2017年7月15日 上午10:57:54 
 * 说明 :
 */
/**
 * @author pengfei
 *@version 创建时间:2017年7月15日 上午10:57:54 
 * @Description:TODO(这里用一句话描述这个类的作用) 
 * 
 */
@Service
public class IntfCalculateZpfServiceImpl implements IntfCalculateZpfService {

	
	 @Autowired
	    private IntfCalculateZpfMapper intfCalculateZpfDao; // 主数据源
	
	
	/* (非 Javadoc) 
	* <p>Title: selectBySid</p> 
	* <p>Description: </p> 
	* @param sid
	* @return 
	* @see org.spring.springboot.service.IntfCalculateZpfService#selectBySid(java.lang.String) 
	*/
	
	@Transactional //这个就是事务控制
	public IntfCalculateZpf selectBySid(String sid) {
		IntfCalculateZpf inf=intfCalculateZpfDao.selectByPrimaryKey(null);
		IntfCalculateZpf record=new IntfCalculateZpf();
		
		BigDecimal sid1=new BigDecimal(12);
		record.setSid(sid1);
		record.setCarNo("FDSAFSFASF");
		record.setSysid(new Date());
		intfCalculateZpfDao.insert(record);
		int a=4/1;
		System.out.println(a);
		return inf;
	}

}
Application

package org.spring.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

/**
 * Spring Boot 应用启动类
 *
 * Created by bysocket on 16/4/26.
 */
// Spring Boot 应用的标识
@SpringBootApplication
@ServletComponentScan
//@MapperScan 如果Mapper下面没有@mapper 这个就要加上去,官方说的,但我没有加也运行了,具体请各位指教
public class Application {

    public static void main(String[] args) {
        // 程序启动入口
        // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
        SpringApplication.run(Application.class,args);
    }
}
DruidStatFilter

/**   
* @Title: DruidStatFilter.java 
* @Package org.spring.springboot.servlet 
* @Description: TODO(用一句话描述该文件做什么) 
* @author pengfei   
* @date 2017年7月15日 下午3:28:56 
* @version V1.0   
*/
package org.spring.springboot.servlet;

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

import com.alibaba.druid.support.http.WebStatFilter;

/**
 * Druid的StatFilter
 *
 * @author   单红宇(365384722)
 * @myblog  http://blog.csdn.net/catoop/
 * @create    2016年3月17日
 */
@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
    initParams={
        @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
})
public class DruidStatFilter extends WebStatFilter {

}
DruidStatViewServlet

/**   
* @Title: DruidStatViewServlet.java 
* @Package org.spring.springboot.servlet 
* @Description: TODO(用一句话描述该文件做什么) 
* @author pengfei   
* @date 2017年7月15日 下午3:28:13 
* @version V1.0   
*/
package org.spring.springboot.servlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

import com.alibaba.druid.support.http.StatViewServlet;

/**
 * StatViewServlet
 *
 * @author 单红宇(365384722)
 * @myblog http://blog.csdn.net/catoop/
 * @create 2016年3月17日
 */
@SuppressWarnings("serial")
@WebServlet(urlPatterns = "/druid/*", 
    initParams={
            @WebInitParam(name="allow",value="192.168.16.110,127.0.0.1"),// IP白名单 (没有配置或者为空,则允许所有访问)
            @WebInitParam(name="deny",value="192.168.16.111"),// IP黑名单 (存在共同时,deny优先于allow)
            @WebInitParam(name="loginUsername",value="admin"),// 用户名
            @WebInitParam(name="loginPassword",value="123456"),// 密码
            @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
    })
public class DruidStatViewServlet extends StatViewServlet{
}


我的测试类:test

/**   
* @Title: test.java 
* @Package org.test 
* @Description: TODO(用一句话描述该文件做什么) 
* @author pengfei   
* @date 2017年7月15日 下午1:03:41 
* @version V1.0   
*/
package org.test;

import java.math.BigDecimal;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.spring.springboot.Application;
import org.spring.springboot.dao.master.IntfCalculateZpfMapper;
import org.spring.springboot.domain.IntfCalculateZpf;
import org.spring.springboot.service.IntfCalculateZpfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/** 
 * @author zhangPengFei QQ:635332940 
 * @version 创建时间:2017年7月15日 下午1:03:41 
 * 说明 :
 */
/**
 * @author pengfei
 *@version 创建时间:2017年7月15日 下午1:03:41 
 * @Description:TODO(这里用一句话描述这个类的作用) 
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class)  
@SpringBootTest(classes=Application.class)
public class test {
	@Autowired
	private IntfCalculateZpfMapper intfCalculateZpfDao; // 主数据源
	@Autowired
	private IntfCalculateZpfService intfCalculateZpfService;
	@Test
	public void test(){
		
		BigDecimal sid=new BigDecimal(12);
		List<IntfCalculateZpf> list=intfCalculateZpfDao.selectBySid(sid);
		System.out.println(list.size());
	}
	@Test
	public void test2(){
		
		BigDecimal sid=new BigDecimal(12);
		IntfCalculateZpf list=intfCalculateZpfService.selectBySid("12");
		System.out.println(list);
	}
}

基本上就是这样了,有什么问题大家可以联系我QQ:635332940 张生

下载地址:http://download.csdn.net/detail/zpf5126/9902227





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于多数据源配置,你可以使用 Druid 数据源来实现。Druid 是一个开源的高性能数据库连接池,可以支持多种数据源类型。 首先,你需要在你的项目中添加 Druid 的依赖。可以在 Maven 或者 Gradle 中添加相应的依赖项。例如,在 Maven 中可以添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 接下来,在你的 Spring Boot 配置文件(一般是 application.yml 或 application.properties)中配置数据源信息。以下是一个示例: ```yaml spring: datasource: druid: default-data-source-type: com.alibaba.druid.pool.DruidDataSource druid-one: url: jdbc:mysql://localhost:3306/db1 username: your-username password: your-password driver-class-name: com.mysql.jdbc.Driver druid-two: url: jdbc:mysql://localhost:3306/db2 username: your-username password: your-password driver-class-name: com.mysql.jdbc.Driver ``` 在上面的示例中,我们配置了两个数据源,分别命名为 `druid-one` 和 `druid-two`。你可以根据实际情况配置更多的数据源。 接下来,在你的代码中,你可以使用 `@Qualifier` 注解来指定要使用的数据源。例如: ```java @Autowired @Qualifier("druid-one") private DataSource dataSource; ``` 这样,你就可以在代码中使用 `dataSource` 实例来操作 `druid-one` 数据源的数据库连接了。 这是一个基本的多数据源配置示例。根据具体需求,你还可以配置连接池的一些参数,如最大连接数、最小空闲连接数等。你可以参考 Druid 的官方文档来了解更多关于 Druid 数据源的配置和使用方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值