1、導(dǎo)入maven依賴pom.xml
<dependency>
????????<groupId>mysql</groupId>
? ? ? ??<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
????????<groupId>org.mybatis.spring.boot</groupId>
????????<artifactId>mybatis-spring-boot-starter</artifactId>
????????<version>1.3.0</version>
</dependency>
<dependency>
? ??????<groupId>org.mybatis.generator</groupId>
? ??????<artifactId>mybatis-generator-core</artifactId>
? ??????<scope>test</scope>
? ??????<version>1.3.2</version>
? ??????<optional>true</optional>
</dependency>
<dependency>
? ??????<groupId>org.springframework.boot</groupId>
? ??????<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
? ??????<groupId>com.alibaba</groupId>
? ??????<artifactId>druid</artifactId>
? ??????<version>1.1.10</version>
</dependency>
<dependency>
? ??????<groupId>com.alibaba</groupId>
? ??????<artifactId>fastjson</artifactId>
? ??????<version>1.2.7</version>
</dependency>
2、引入配置文件
spring:
? ??datasource:
? ??????url:
?jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&connectTimeout=3000&socketTimeout=1000
? ??????username: root?????????? # 需自己修改填寫
????? ??password: 123456? ? ? ? ?# 需自己修改填寫
????? ??type: com.alibaba.druid.pool.DruidDataSource
? ??????driver-class-name: com.mysql.jdbc.Driver
? ??????minIdle: 5
? ??????maxActive: 100
? ??????initialSize: 10
? ??????maxWait: 60000
? ??????timeBetweenEvictionRunsMillis: 60000
? ??????minEvictableIdleTimeMillis: 300000
? ??????validationQuery: select 'x'
? ??????testWhileIdle: true
? ??????testOnBorrow: false
? ??????testOnReturn: false
? ??????poolPreparedStatements: true
? ??????maxPoolPreparedStatementPerConnectionSize: 50
? ??????removeAbandoned: true
? ??????filters: stat?
? ??????????????????# ,wall,log4j # 配置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無(wú)法統(tǒng)計(jì),'wall'用于防火墻
????? ??connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000?
? ??????????????????# 通過(guò)?connectProperties屬性來(lái)打開(kāi)mergeSql功能;慢SQL記錄
? ? ? ??useGlobalDataSourceStat: true # 合并多個(gè)DruidDataSource的監(jiān)控?cái)?shù)據(jù)
? ? ? ??druidLoginName: wjf # 登錄druid的賬號(hào)
? ? ? ??druidPassword: wjf # 登錄druid的密碼
? ? ? ??cachePrepStmts: true? # 開(kāi)啟二級(jí)緩存mybatis:
? ??????typeAliasesPackage: com.xdclass.mobile.xdclassmobileredis.mapper# 需要自己修改填寫
?? ????mapperLocations: classpath:/com/xdclass/mobile/xdclassmobileredis/mapper/*.xml
? ?????mapperScanPackage: com.xdclass.mobile.xdclassmobileredis.mapper
? ?????configLocation: classpath:/mybatis-config.xml
3、引入mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>?
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"?
???? "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
?????<settings>
????????????<!-- 使全局的映射器啟用或禁用緩存。-->
????????????<setting name="cacheEnabled" value="true" />
????????????<!-- 全局啟用或禁用延遲加載。當(dāng)禁用時(shí),所有關(guān)聯(lián)對(duì)象都會(huì)即時(shí)加載。-->
????????????<setting name="lazyLoadingEnabled" value="true" />
????????????<!-- 當(dāng)啟用時(shí),有延遲加載屬性的對(duì)象在被調(diào)用時(shí)將會(huì)完全加載任意屬性。
????????????????????否則,每種屬性將會(huì)按需要加載。-->? ? ? ?
????????????<setting name="aggressiveLazyLoading" value="true"/>? ? ? ?
????????????<!-- 是否允許單條sql 返回多個(gè)數(shù)據(jù)集? (取決于驅(qū)動(dòng)的兼容性) default:true -->
????????????<setting name="multipleResultSetsEnabled" value="true" />
????????????<!-- 是否可以使用列的別名 (取決于驅(qū)動(dòng)的兼容性) default:true -->
????????????<setting name="useColumnLabel" value="true" />
????????????<!-- 允許JDBC 生成主鍵。需要驅(qū)動(dòng)器支持。如果設(shè)為了true,這個(gè)設(shè)置將強(qiáng)制
????????????使用被生成的主鍵,有一些驅(qū)動(dòng)器不兼容不過(guò)仍然可以執(zhí)行。? default:false? -->
????????????<setting name="useGeneratedKeys" value="false" />
????????????<!-- 指定 MyBatis 如何自動(dòng)映射數(shù)據(jù)基表的列 NONE:不隱射 PARTIAL:部分? FULL:全部-->
????????????<setting name="autoMappingBehavior" value="PARTIAL" />
????????????<!-- 這是默認(rèn)的執(zhí)行類型? (SIMPLE: 簡(jiǎn)單; REUSE: 執(zhí)行器可能重復(fù)使用
????????????????????prepared statements語(yǔ)句;BATCH: 執(zhí)行器可以重復(fù)執(zhí)行語(yǔ)句和批量更新)? -->
????????????<setting name="defaultExecutorType" value="SIMPLE" />
????????????<setting name="defaultStatementTimeout" value="25" />
????????????<setting name="defaultFetchSize"value="100" />
????????????<setting name="safeRowBoundsEnabled" value="false" />
????????????<!-- 使用駝峰命名法轉(zhuǎn)換字段。-->
????????????<setting name="mapUnderscoreToCamelCase" value="true" />
????????????<!-- 設(shè)置本地緩存范圍 session:就會(huì)有數(shù)據(jù)的共享??
????????????????????statement:語(yǔ)句范圍 (這樣就不會(huì)有數(shù)據(jù)的共享) defalut:session -->
????????????<setting name="localCacheScope" value="SESSION" />
????????????<!-- 默認(rèn)為OTHER,為了解決oracle插入null報(bào)錯(cuò)的問(wèn)題要設(shè)置為NULL -->
????????????<setting name="jdbcTypeForNull" value="NULL" />
????????????<setting name="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString"/>
????</settings>
</configuration>
4、引入DataSourceConfig配置
package com.xdclass.mobile.xdclassmobileredis;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import javax.sql.DataSource;
import java.sql.SQLException;
/**
?* Created by wanlichao on 2016/10/25 0025.
?*/
@Configuration
@MapperScan("com.xdclass.mobile.xdclassmobileredis.mapper")
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 50)
public class DataSourceConfig {
????private Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);
? ? @Value("${spring.datasource.url}")
????private String dbUrl;
????@Value("${spring.datasource.type}")
????private String dbType;
????@Value("${spring.datasource.username}")
????private String username;
????@Value("${spring.datasource.password}")
????private String password;
????@Value("${spring.datasource.driver-class-name}")
????private String driverClassName;
????@Value("${spring.datasource.initialSize}")
????private int initialSize;
????@Value("${spring.datasource.minIdle}")
????private int minIdle;
????@Value("${spring.datasource.maxActive}")
????private int maxActive;
????@Value("${spring.datasource.maxWait}")
????private int maxWait;
????@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
????private int timeBetweenEvictionRunsMillis;
????@Value("${spring.datasource.minEvictableIdleTimeMillis}")
????private int minEvictableIdleTimeMillis;
????@Value("${spring.datasource.validationQuery}")
????private String validationQuery;
????@Value("${spring.datasource.testWhileIdle}")
????private boolean testWhileIdle;
????@Value("${spring.datasource.testOnBorrow}")
????private boolean testOnBorrow;
????@Value("${spring.datasource.testOnReturn}")
????private boolean testOnReturn;
????@Value("${spring.datasource.poolPreparedStatements}")
????private boolean poolPreparedStatements;
????@Value("${spring.datasource.filters}")
????private String filters;
????@Value("${spring.datasource.connectionProperties}")
????private String connectionProperties;
????@Value("${spring.datasource.useGlobalDataSourceStat}")
????private boolean useGlobalDataSourceStat;
????@Value("${spring.datasource.druidLoginName}")
????private String druidLoginName;
????@Value("${spring.datasource.druidPassword}")
????private String druidPassword;
????@Bean(name="dataSource",destroyMethod = "close", initMethod="init")
????@Primary //不要漏了這
????public DataSource dataSource(){
??????? ????DruidDataSource datasource =new DruidDataSource();
??????? ????try{
??????????? ????datasource.setUrl(this.dbUrl);
????????????????datasource.setDbType(dbType);
????????????????datasource.setUsername(username);
????????????????datasource.setPassword(password);
????????????????datasource.setDriverClassName(driverClassName);
????????????????datasource.setInitialSize(initialSize);
????????????????datasource.setMinIdle(minIdle);
????????????????datasource.setMaxActive(maxActive);
????????????????datasource.setMaxWait(maxWait);
????????????????datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
????????????????datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
????????????????datasource.setValidationQuery(validationQuery);
????????????????datasource.setTestWhileIdle(testWhileIdle);
????????????????datasource.setTestOnBorrow(testOnBorrow);
????????????????datasource.setTestOnReturn(testOnReturn);
????????????????datasource.setPoolPreparedStatements(poolPreparedStatements);
????????????????datasource.setFilters(filters);
????????????} catch (SQLException e) {
????????????????logger.error("druid configuration initialization filter", e);
????????????}
????????return datasource;
????}
????/////////? 下面是druid 監(jiān)控訪問(wèn)的設(shè)置? /////////////////
????@Bean
????public ServletRegistrationBean druidServlet() {
??????? ????ServletRegistrationBean reg =new ServletRegistrationBean();
????????????reg.setServlet(new StatViewServlet());
????????????reg.addUrlMappings("/druid/*");? //url 匹配
????????????reg.addInitParameter("allow", "192.168.16.110,127.0.0.1");?
????????????????????// IP白名單 (沒(méi)有配置或者為空,則允許所有訪問(wèn))
????????????reg.addInitParameter("deny", "192.168.16.111"); //IP黑名單 (存在共同時(shí),deny優(yōu)先于allow)
????????????reg.addInitParameter("loginUsername", this.druidLoginName);//登錄名
????????????reg.addInitParameter("loginPassword", this.druidPassword);//登錄密碼
????????????reg.addInitParameter("resetEnable", "false"); // 禁用HTML頁(yè)面上的“Reset All”功能
????????????return reg;
????}
????@Bean(name="druidWebStatFilter")
????public FilterRegistrationBean filterRegistrationBean() {
??????????? FilterRegistrationBean filterRegistrationBean =new FilterRegistrationBean();
????????????filterRegistrationBean.setFilter(new WebStatFilter());
????????????filterRegistrationBean.addUrlPatterns("/*");
????????????filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); ????????????????????//忽略資源
????????????filterRegistrationBean.addInitParameter("profileEnable", "true");
????????????filterRegistrationBean.addInitParameter("principalCookieName", "USER_COOKIE");
????????????filterRegistrationBean.addInitParameter("principalSessionName", "USER_SESSION");
??????? ????return filterRegistrationBean;
????}
}