spring-boot 学习之路

    • 搭建
      • 扩展一
        • spring-boot-devtools 组件
      • 扩展二
        • 使用YAML 配置
          • server配置
          • 自定义启动横幅
          • druid配置
          • mybatis-spring-boot-starter
          • Redis

搭建

用IDE新建一个 web project(maven)项目 -> my-spring-boot

编辑pom.xml,新增如下配置:

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>1.5.9.RELEASEversion>
parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
dependencies>

新建 一个 应用程序 - application-> SpringBootApplication

package own.application;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
//@SpringBootApplication // 相当于使用了 @Configuration @EnableAutoConfiguration @ComponentScan
public class SpringBootApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

@ComponentScan 会扫描以其为根路径下所有目录下的@Component@Service@Repository@Controller 注册为SpringBean

新建 一个 controller -> HelloController

package own.application.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

}

启动(run)SpringBootApplication ->main-> 并访问 -> http://localhost:8080/
spring-boot 学习之路_第1张图片

成功输出-搭建完成

项目结构:
own
 +- application
  +- SpringBootApplication.java
  |
  +- test
   +- controller
    +- HelloController.java

扩展一

spring-boot-devtools 组件

再pom - dependencies 下添加配置:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-devtoolsartifactId>
    <optional>trueoptional>
dependency>

devtools 是开发者工具,能自动识别开发环境和生产环境(用java -jar 运行项目),并自动禁用启用以下功能。
1.静态文件、模板文件、资源文件缓存
2.session 持久化、控制台输出功能
3.修改内容自动重启
……

扩展二

使用YAML 配置

server配置
#Server配置
server: 
  port: 8080
  address: 127.0.0.1
  contextPath: /haha #项目根路径
  max-http-header-size: 0 #HTTP消息头的最大字节数
  max-http-post-size: 0 #HTTP内容的最大字节数

  server-header: 
  servlet-path:   #主要dispatcher servlet的路径
  use-forward-headers: true #使用转发消息 请求头
  connection-timeout: 30000  #等待连接超时时间(ms),-1为 不超时
  context-parameters: #上下文参数
  display-name: application #应用程序名称

  ##session配置
  session:
    timeout: 10
    cookie:
      comment: #cookie注释
      domain: #域
      http-only: true #将cookie标注为 http-only,http-only 可以很大降低cookie的信息泄露
      max-age: 0 #cookie生命周期
      name: 
      path: 
      secure: true #安全的cookie,标志为true时,只接收https下的cookie
    persistent: false #重启时,持久化session的数据
#    store-dir:  #存储session的目录
#      executable: false
#      last-modified: 100
#      readable: false
#      writable: false
    tracking-modes: #session跟踪方式



  #tomcat配置
  tomcat: #内嵌tomcat配置
    accept-count: 0 #当所有可能的请求处理线程正在使用时,传入连接请求的最大队列长度。
    accesslog:  #访问日志配置
      enabled: false   #是否启用,默认不启用
      buffered: true  #缓存区,默认true
      directory: logs #日志输出目录,可以是绝对路径,或相对于tomcat根目录
      file-date-format: yyyy-MM-dd  #日志文件 日期格式
      pattern: common
      prefix: access_log   #日志文件名称前缀
      rename-on-rotate:  false 
      request-attributes-enabled: false #记录请求属性(ip,主机名称,协议,端口)
      rotate: true #自动分割日志文件
      suffix: .log #文件后缀
    additional-tld-skip-patterns:
    background-processor-delay: 30 #后台进程间的延迟(s)
    basedir: F:\my-spring-boot #tomcat根目录
    internal-proxies:  10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.1[6-9]{1}\.\d{1,3}\.\d{1,3}|172\.2[0-9]{1}\.\d{1,3}\.\d{1,3}|172\.3[0-1]{1}\.\d{1,3}\.\d{1,3} #匹配受信任的代理 的正则表达式
    max-connections: 0 #最大连接数,超过时会接收accept-count的连接
    max-http-post-size: 0 #post请求最大字节数
    max-threads: 0 #最大线程数(活跃的)
    min-spare-threads: 0 #最小线程数(备用的)
    port-header: X-Forwarded-Port
    protocol-header: 
    protocol-header-https-value: 
    redirect-context-root: false #重定向时是否添加/
    remote-ip-header: 
    uri-encoding: UTF-8 #uri编码

   #压缩配置  
#  compression: 
#    enabled: 
#    excluded-user-agents:
#    mime-types:
#    min-response-size: 


#  error:
#    include-stacktrace: 
#    path: 
#    whitelabel:
#      enabled: 

  #jetty容器配置
#  jetty:
#    acceptors: 
#    max-http-post-size: 
#    selectors: 

  #jsp 服务程序配置
#  jsp-servlet:
#    class-name: 
#    init-parameters:
#    registered: 

#  ssl:
#    ciphers: 
#    client-auth: 
#    enabled: 
#    enabled-protocols:
#    key-alias: 
#    key-password: 
#    key-store: 
#    key-store-password: 
#    key-store-provider: 
#    key-store-type: 
#    protocol: 
#    trust-store: 
#    trust-store-password: 
#    trust-store-provider: 
#    trust-store-type: 

#  web服务器/容器    
#  undertow:
#    accesslog:
#      dir:
#        executable: 
#        last-modified: 
#        readable: 
#        writable: 
#      enabled: 
#      pattern: 
#      prefix: 
#      rotate: 
#      suffix: 
#    buffer-size: 
#    buffers-per-region: 
#    direct-buffers: 
#    io-threads: 
#    max-http-post-size: 
#    worker-threads: 
自定义启动横幅

banners设置

banner:
  charset: UTF-8 #横幅编码
  image:
    height: 20
    invert: false #横幅背景是否是空白
    location: #横幅图像资源地址
    margin: 10 #横幅向左位移
    width: 150
  location: banner.txt #文本资源位置


druid配置

全部配置如下

spring:
  datasource:
    druid:
      access-to-underlying-connection-allowed: false #允许访问底层连接
      active-connection-stack-trace:  #活跃连接堆跟踪
      active-connections: #活跃连接列表
      aop-patterns: #AOP模式
      async-close-connection-enable: false #启用异步关闭连接
      async-init: false #异步初始化
      break-after-acquire-failure: false #失败后跳过
      clear-filters-enable: false #启动清除过滤器
      connect-properties:   #连接配置
      connection-error-retry-attempts: 1 #连接出错尝试几次重新连接
      connection-init-sqls:   #连接初始化语句
      connection-properties:  #连接属性
      create-scheduler:   #创建程序
      db-type:  #DB类型
      default-auto-commit: false #默认自动提交
      default-catalog:  #默认目录
      default-read-only: false #默认只读
      default-transaction-isolation: 1 #默认事务隔离
      destroy-scheduler:  #销毁程序
      driver:   #驱动类
      driver-class-name:  #驱动类名
      dup-close-log-enable: true #启用DUP关闭日志
      enable: true #启动连接池
      exception-sorter: 
      exception-sorter-class-name: 
      fail-fast: true #快速失败?
      filter-class-names: #过滤器类名称
      #过滤器配置
      filter:
        config:
          enabled: false #启用Enable ConfigFilter.
        encoding:
          enabled: false #启用EncodingConvertFilter
        #commons-log配置
        commons-log:
          connection-close-after-log-enabled: 
          connection-commit-after-log-enabled: 
          connection-connect-after-log-enabled: 
          connection-connect-before-log-enabled: 
          connection-log-enabled: 
          connection-log-error-enabled: 
          connection-logger-name: 
          connection-rollback-after-log-enabled: 
          data-source-log-enabled: 
          data-source-logger-name: 
          enabled: 
          result-set-close-after-log-enabled: 
          result-set-log-enabled: 
          result-set-log-error-enabled: 
          result-set-logger-name: 
          result-set-next-after-log-enabled: 
          result-set-open-after-log-enabled: 
          statement-close-after-log-enabled: 
          statement-create-after-log-enabled: 
          statement-executable-sql-log-enable: 
          statement-execute-after-log-enabled: 
          statement-execute-batch-after-log-enabled: 
          statement-execute-query-after-log-enabled: 
          statement-execute-update-after-log-enabled: 
          statement-log-enabled: 
          statement-log-error-enabled: 
          statement-logger-name: 
          statement-parameter-clear-log-enable: 
          statement-parameter-set-log-enabled: 
          statement-prepare-after-log-enabled: 
          statement-prepare-call-after-log-enabled: 
          statement-sql-format-option:
            desensitize: 
            parameterized: 
            pretty-format: 
            upp-case: 
          statement-sql-pretty-format: 

        #LOG4J配置
        log4j:
          connection-close-after-log-enabled: 
          connection-commit-after-log-enabled: 
          connection-connect-after-log-enabled: 
          connection-connect-before-log-enabled: 
          connection-log-enabled: 
          connection-log-error-enabled: 
          connection-logger-name: 
          connection-rollback-after-log-enabled: 
          data-source-log-enabled: 
          data-source-logger-name: 
          enabled: 
          result-set-close-after-log-enabled: 
          result-set-log-enabled: 
          result-set-log-error-enabled: 
          result-set-logger-name: 
          result-set-next-after-log-enabled: 
          result-set-open-after-log-enabled: 
          statement-close-after-log-enabled: 
          statement-create-after-log-enabled: 
          statement-executable-sql-log-enable: 
          statement-execute-after-log-enabled: 
          statement-execute-batch-after-log-enabled: 
          statement-execute-query-after-log-enabled: 
          statement-execute-update-after-log-enabled: 
          statement-log-enabled: 
          statement-log-error-enabled: 
          statement-logger-name: 
          statement-parameter-clear-log-enable: 
          statement-parameter-set-log-enabled: 
          statement-prepare-after-log-enabled: 
          statement-prepare-call-after-log-enabled: 
          statement-sql-format-option:
            desensitize: 
            parameterized: 
            pretty-format: 
            upp-case: 
          statement-sql-pretty-format: 

        #LOG4J2配置
        log4j2:
          connection-close-after-log-enabled: 
          connection-commit-after-log-enabled: 
          connection-connect-after-log-enabled: 
          connection-connect-before-log-enabled: 
          connection-log-enabled: 
          connection-log-error-enabled: 
          connection-logger-name: 
          connection-rollback-after-log-enabled: 
          data-source-log-enabled: 
          data-source-logger-name: 
          enabled: 
          result-set-close-after-log-enabled: 
          result-set-log-enabled: 
          result-set-log-error-enabled: 
          result-set-logger-name: 
          result-set-next-after-log-enabled: 
          result-set-open-after-log-enabled: 
          statement-close-after-log-enabled: 
          statement-create-after-log-enabled: 
          statement-executable-sql-log-enable: 
          statement-execute-after-log-enabled: 
          statement-execute-batch-after-log-enabled: 
          statement-execute-query-after-log-enabled: 
          statement-execute-update-after-log-enabled: 
          statement-log-enabled: 
          statement-log-error-enabled: 
          statement-logger-name: 
          statement-parameter-clear-log-enable: 
          statement-parameter-set-log-enabled: 
          statement-prepare-after-log-enabled: 
          statement-prepare-call-after-log-enabled: 
          statement-sql-format-option:
            desensitize: 
            parameterized: 
            pretty-format: 
            upp-case: 
          statement-sql-pretty-format: 

        #slf4j配置
        slf4j:
          connection-close-after-log-enabled: 
          connection-commit-after-log-enabled: 
          connection-connect-after-log-enabled: 
          connection-connect-before-log-enabled: 
          connection-log-enabled: 
          connection-log-error-enabled: 
          connection-logger-name: 
          connection-rollback-after-log-enabled: 
          data-source-log-enabled: 
          data-source-logger-name: 
          enabled: 
          result-set-close-after-log-enabled: 
          result-set-log-enabled: 
          result-set-log-error-enabled: 
          result-set-logger-name: 
          result-set-next-after-log-enabled: 
          result-set-open-after-log-enabled: 
          statement-close-after-log-enabled: 
          statement-create-after-log-enabled: 
          statement-executable-sql-log-enable: 
          statement-execute-after-log-enabled: 
          statement-execute-batch-after-log-enabled: 
          statement-execute-query-after-log-enabled: 
          statement-execute-update-after-log-enabled: 
          statement-log-enabled: 
          statement-log-error-enabled: 
          statement-logger-name: 
          statement-parameter-clear-log-enable: 
          statement-parameter-set-log-enabled: 
          statement-prepare-after-log-enabled: 
          statement-prepare-call-after-log-enabled: 
          statement-sql-format-option:
            desensitize: 
            parameterized: 
            pretty-format: 
            upp-case: 
          statement-sql-pretty-format: 

        #stat过滤器:统计监控信息
        stat:
          connection-stack-trace-enable: true #启动连接堆跟踪
          db-type: mysql #数据库类型
          enabled: true #启用
          log-slow-sql: true #记录慢SQL
          merge-sql: true #合并相同查询语句(参数不同)
          slow-sql-millis: 10000 #log-slow-sql为true,多久(ms)才表示为慢SQL

        #防火墙配置
        wall:
          config:
            ##语句防火墙
            #DQL
            selelct-allow: #是否允许执行select语句
            select-all-column-allow:  #是否允许执行SELECT * FROM T这样的语句。如果设置为false,不允许执行select * from t,但select * from (select id, name from t) a。这个选项是防御程序通过调用select *获得数据表的结构信息。
            select-except-check: #检测SELECT EXCEPT
            select-intersect-check:   #检测SELECT INTERSECT
            select-minus-check: #检测SELECT MINUS
            select-union-check: #检测SELECT UNION
            select-into-allow: #是否允许执行 select into 语句
            minus-allow:  #是否允许SELECT * FROM A MINUS SELECT * FROM B这样的语句
            select-into-outfile-allow: #SELECT ... INTO OUTFILE 是否允许,这个是mysql注入攻击的常见手段,缺省是禁止的
            select-where-alway-true-check:  #检查SELECT语句的WHERE子句是否是一个永真条件
            select-having-alway-true-check: #检查SELECT语句的HAVING子句是否是一个永真条件
            condition-and-alway-false-allow: #检查查询条件(WHERE/HAVING子句)中是否包含AND永假条件
            condition-and-alway-true-allow:  #检查查询条件(WHERE/HAVING子句)中是否包含AND永真条件
            condition-double-const-allow:   #查询条件中是否允许连续两个常量运算表达式
            condition-like-true-allow:  #检查查询条件(WHERE/HAVING子句)中是否包含LIKE永真条件
            condition-op-bitwse-allow:  #查询条件中是否允许有"&"、"~"、"|"、"^"运算符。
            condition-op-xor-allow:   #查询条件中是否允许有XOR条件。XOR不常用,很难判断永真或者永假,缺省不允许。
            const-arithmetic-allow:   #拦截常量运算的条件,比如说WHERE FID = 3 - 1,其中"3 - 1"是常量运算表达式。

            limit-zero-allow:   #是否允许limit 0这样的语句
            select-limit: #配置最大返回行数,如果select语句没有指定最大返回行数,会自动修改select添加返回限制

            #DML
            insert-allow:   #是否允许执行insert语句
            insert-values-check-size:   #检查insert values的大小?
            complete-insert-values-check:   #完整的检查insert的values
            intersect-allow: #是否允许SELECT * FROM A INTERSECT SELECT * FROM B这样的语句

            delete-allow: #是否允许执行delete语句
            delete-where-alway-true-check:  #检查DELETE语句的WHERE子句是否是一个永真条件
            delete-where-none-check:  #检查DELETE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险

            update-allow: #是否允许执行update语句
            update-check-handler: #更新检查处理器?
            update-where-alay-true-check: #检查UPDATE语句的WHERE子句是否是一个永真条件
            update-where-none-check: #检查UPDATE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险

            #DDL
            none-base-statement-allow: #是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽DDL。
            alter-table-allow:  #是否允许执行Alter Table语句
            create-table-allow:   #是否允许执行create table语句
            truncate-allow: #是否允许执行truncate语句
            rename-table-allow:   #是否允许rename table语句
            drop-table-allow: #是否允许自行 drop table

            #DCL
            show-allow: #是否允许使用show语法
            call-allow:   #是否允许通过jdbc的call语法调用存储过程
            commit-allow:  #是否允许执行commit操作
            rollback-allow:   #是否允许回滚
            use-allow: #是否允许使用use语法



            ##其他
            # DB设置
            set-allow: #是否允许使用SET语法
            replace-allow:  #是否允许执行REPLACE语句
            read-only-tables: #指定的表只读,不能够在SELECT INTO、DELETE、UPDATE、INSERT、MERGE中作为"被修改表"出现
            must-parameterized:   #是否必须参数化,如果为True,则不允许类似WHERE ID = 1这种不参数化的SQL
            multi-statement-allow: #是否允许一次执行多条语句,缺省关闭
            lock-table-allow:   #是否允许锁表
            strict-syntax-check: #是否进行严格的语法检测,Druid SQL Parser在某些场景不能覆盖所有的SQL语法,出现解析SQL出错,可以临时把这个选项设置为false,同时把SQL反馈给Druid的开发者。

            describe-allow: #是否允许执行mysql的describe语句,缺省打开

            merge-allow:  #是否允许执行MERGE语句,这个只在Oracle中有用
            comment-allow: #是否允许语句中存在注释,Oracle的用户不用担心,Wall能够识别hints和注释的区别

            #不知道干嘛用的设置
            deny-functions: #方法 黑名单
            deny-objects: #对象 黑名单
            deny-schemas: #Schema 黑名单
            deny-tables:  #表格 黑名单
            deny-variants: #变量  黑名单

            permit-functions: #方法 白名单
            permit-schemas: #schemas 白名单
            permit-tables:  #表格 白名单
            permit-variants:  #变量 白名单

            function-check: #检测是否使用了禁用的函数
            object-check: #检测是否使用了“禁用对对象
            schema-check:   #检测是否使用了禁用的Schema
            table-check: #检测是否使用了禁用的表
            variant-check: #检测是否使用了禁用的变量

            #JDBC设置
            metadata-allow: #是否允许是否允许调用Connection.getMetadata方法,这个方法调用会暴露数据库的表信息
            wrap-allow: #是否允许调用Connection/Statement/ResultSet的isWrapFor和unwrap方法,这两个方法调用,使得有办法拿到原生驱动的对象,绕过WallFilter的检测直接执行SQL

            #不知道干嘛用的设置
            dir: #定配置装载的目录
            start-transaction-allow: #是否允许使用start transaction?
            inited:   #邀请?
            block-allow:  #是否允许阻塞
            hint-allow:   #是否允许提示?
            case-condition-const-allow:  #
            do-privileged-allow:  #
            tenant-column: #占用列?
            tenant-table-pattern: #占用表方式?

          db-type: #db类型
          enabled: #启用
          log-violation: #对被认为是攻击的SQL进行LOG.error输出
          provider-white-list: #白名单?
          tenant-column: #占用列?
          throw-exception: #对被认为是攻击的SQL抛出SQLExcepton
      filters: #过滤器名称?
      init-global-variants: false #初始化全局变量?
      init-variants: false #初始化变量?
      initial-size: 10 #初始化时建立物理连接的个数
      keep-alive: #连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作
      kill-when-socket-read-timeout: true #socket连接超时时kill
      log-abandoned: false #记录丢失?
      log-different-thread: #记录不同的线程?
      login-timeout:  #连接超时?
      max-active: 50 #最大连接池数量
      max-create-task-count: 10 #最大创建任务数 
      max-evictable-idle-time-millis: #连接保持空闲而不被驱逐的最大时间
      #max-idle: #已弃用
      max-open-prepared-statements: 100 #最大打开的prepared-statements
      max-pool-prepared-statement-per-connection-size: 100 #?
      max-wait: #获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
      max-wait-thread-count:  #最大的线程等待数
      min-evictable-idle-time-millis: #连接保持空闲而不被驱逐的最小时间
      min-idle: 5 #最小连接池数量
      name: 
      not-full-timeout-retry-count: #
      num-tests-per-eviction-run:  #
      object-name:
        m-bean-server:
      on-fatal-error-max-active:  #
      oracle: #
      password: 
      password-callback:  #
      phy-timeout-millis:   #物理超时
      pool-prepared-statements:   #prepared-statements线程池?
      pooling-connection-info:  #池连接信息?
      proxy-filters:  #代理过滤器?
      query-timeout:  #查询超时时间
      remove-abandoned:   #移除被遗弃的?
      remove-abandoned-timeout: #移除超时时间?
      remove-abandoned-timeout-millis: #移除超时时间毫秒?
      reset-stat-enable: false #启用重置统计信息
      share-prepared-statements: #分布式prepared-statements?
      sql-stat-map: #
      stat-data:  #
      stat-data-for-m-bean: #
      stat-logger:  #
      stat-view-servlet:
        allow: #白名单
        deny: #黑名单
        enabled: true
        login-password: #登录密码
        login-username: #登录用户
        reset-enable: #启用重置统计信息
        url-pattern: #访问路径
      test-on-borrow: #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
      test-on-return: #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
      test-while-idle: #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      time-between-connect-error-millis: #连接错误之间的时间
      time-between-eviction-runs-millis: #有两个含义:1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
      time-between-log-stats-millis: #统计日志之间的时间
      transaction-query-timeout: #事务查询超时时间
      transaction-threshold-millis: #事务使用时长?
      url: 
      use-global-data-source-stat: #使用全局数据源统计?
      use-local-session-state: #使用本地服务统计?
      use-oracle-implicit-cache: #使用oracle 内置缓存?
      use-unfair-lock:  #使用不公平锁?
      user-callback:  #用户回调?
      username: 
      valid-connection-checker: #连接的有效检查类
      valid-connection-checker-class-name: #连接的有效检查类名
      validation-query: #用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
      validation-query-timeout: #单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
      wall-stat-map:  #
      #统计web请求
      web-stat-filter:
        enabled: true
        exclusions: *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* #排除URL
        principal-cookie-name: #cookie名称?
        principal-session-name: #session名称?
        profile-enable: true #监控URL 调用的SQL列表
        session-stat-enable: true #统计session
        session-stat-max-count: 1000 #统计最大session数
        url-pattern: / #监控URL

精简配置(根据自己的需要):

spring:
  datasource:
    druid:
      enable: true #启动连接池
      url: jdbc:mysql://localhost:3306/hehe?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver

      initial-size: 10
      max-active: 100
      min-idle: 10
      max-wait: 50
      pool-prepared-statements: true
      max-open-prepared-statements: 50 #和上面的等价
      validation-query: select 'x'
      validation-query-timeout: 5
      test-on-borrow: true
      test-on-return: false
      test-while-idle: true
      time-between-eviction-runs-millis: 30000
      min-evictable-idle-time-millis: 10000
      max-evictable-idle-time-millis: 60000

      #统计/监控视图配置
      stat-view-servlet:
        allow: #白名单
        deny: #黑名单
        enabled: true
        login-password: admin #登录密码
        login-username:  admin #登录用户
        reset-enable: false #启用重置统计信息
        url-pattern: /druid #访问路径

      #统计web请求
      web-stat-filter:
        enabled: true
        principal-cookie-name: #cookie名称?
        principal-session-name: #session名称?
        profile-enable: true #监控URL 调用的SQL列表
        session-stat-enable: true #统计session
        session-stat-max-count: 1000 #统计最大session数
        url-pattern: / #监控URL

      #过滤器配置
      filter:

        config:
          enabled: false #启用Enable ConfigFilter.
        encoding:
          enabled: false #启用EncodingConvertFilter

        #stat过滤器:统计监控信息
        stat:
          connection-stack-trace-enable: true #启动连接堆跟踪
          db-type: mysql #数据库类型
          enabled: true #启用
          log-slow-sql: true #记录慢SQL
          merge-sql: true #合并相同查询语句(参数不同)
          slow-sql-millis: 10000 #log-slow-sql为true,多久(ms)才表示为慢SQL

        #防火墙配置
        wall:
          config:
            ##语句防火墙
            #DDL
            alter-table-allow: false #是否允许执行Alter Table语句
            truncate-allow: false #是否允许执行truncate语句
            rename-table-allow: false  #是否允许rename table语句
            drop-table-allow: false #是否允许自行 drop table
            #DCL
            show-allow: false #是否允许使用show语法
            use-allow: false #是否允许使用use语法

            #JDBC设置
            metadata-allow: false #是否允许是否允许调用Connection.getMetadata方法,这个方法调用会暴露数据库的表信息
            enabled: #启用
            log-violation: true #对被认为是攻击的SQL进行LOG.error输出
            throw-exception: false #对被认为是攻击的SQL抛出SQLExcepton


        #LOG4J2配置
        log4j2:
          enabled: true
          connection-log-enabled: true
          connection-log-error-enabled: true
          result-set-log-enabled: true
          result-set-log-error-enabled: true
          statement-log-enabled: true
          statement-log-error-enabled: true


mybatis-spring-boot-starter

yml配置:

mybatis:
  check-config-location: false
  #config: #已弃用,请使用config-location
  #config-location: 
  #configuration-properties: #config的外部properties文件?

  #优先级:executor-type > configuration:default-executor-type
  executor-type: 
    #batch #会批处理语句,及重复使用statements的执行器
    #reuse #会重复使用  prepared statements 语句 的执行器
    simple #简单的,没有特点的执行器
  mapper-locations: classpath*:own/application/**/dao/*Mapper.xml
  type-aliases-package: 
  type-handlers-package: 
  #如果配置了configLocation,这个不用配置
  configuration:
    #cache-names: #缓存名称
    #caches: 
    #database-id: #数据源ID?

    #incomplete-cache-refs:
    #incomplete-methods:
    #incomplete-result-maps:
    #incomplete-statements:
    #key-generator-names:  
    #key-generators:
    #reflector-factory:

    #自定义对象工厂(mybatis 初始化对象时调用)
    #object-factory:
    #object-wrapper-factory:

    #插件
    #interceptors: #拦截器?

    #ParameterHandler 处理器
    #parameter-map-names:
    #parameter-maps:

    #StatementHandler 处理器
    #mapped-statement-names:
    #mapped-statements:

    #ResultSetHandler
    #result-map-names:
    #result-maps:


    #环境
    #environment: 

    #sql-fragments:
    #variables: #变量?

    #settings 配置
    cache-enabled: true #启用缓存
    lazy-loading-enabled: true #启用延迟加载,可被 fetchType 属性覆盖
    aggressive-lazy-loading: true #当启用时,任何方法调用都将加载对象的所有延迟属性。否则,每个属性都是按需加载的
    multiple-result-sets-enabled: true #允许或不允许从单个语句返回多个结果集(默认true)
    #use-column-label: #使用列标签 替代 列名?好像是不同驱动 有不同的效果,具体不明
    #use-generated-keys: #设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中
    auto-mapping-behavior: #指定自动地将列映射到字段/属性的方式
      # full 将自动映射任何复杂的结果映射
      partial #(默认值)只会自动映射结果,而不会在内部定义嵌套的结果映射
      # none 禁用自动映射
    auto-mapping-unknown-column-behavior: #在检测到自动映射目标的未知列(或未知属性类型)时指定行为。
      # failing #映射失败 抛出异常
      none  #什么也不做(默认值)
      # warning #输出警告日志
    default-executor-type: #executor 执行器类型
      #batch #会批处理语句,及重复使用statements的执行器
      #reuse #会重复使用  prepared statements 语句 的执行器
      simple #简单的,没有特点的执行器
    default-statement-timeout: 30 #设置驱动程序等待来自数据库的响应的秒数。
    #default-fetch-size:  #给驱动程序设置一个提示,以控制返回结果的获取大小。这个参数值可以通过查询设置覆盖。
    #safe-result-handler-enabled: #是否 允许在嵌套语句中 使用 ResultHandler 。如果允许,请设置成 false(默认true)
    #safe-row-bounds-enabled: #是否 允许在嵌套语句中 使用 RowBounds 。如果允许,请设置成 false(默认false)
    map-underscore-to-camel-case: true #允许映射时,将数据库 带下划线的字段,自动转换成 驼峰式 命名法 的java属性,例: “a_column” -> "aColumn"
    local-cache-scope: #Mybatis使用本地缓存来防止循环引用,并加速重复的嵌套查询。
      session #(默认)在同一个sqlSession下的所有查询都会被缓存
      #statement #缓存只作用于statement
    #jdbc-type-for-null: #当没有为参数提供特定的JDBC类型时,指定null值的JDBC类型。
      #other #(默认值)
    #lazy-load-trigger-methods:  #指定哪个对象的方法触发一个延迟加载
    default-scripting-language: #指定用于动态SQL生成的缺省语言
    #default-enum-type-handler:  #自定义 enum类型 的TypeHandler 类
    call-setters-on-nulls: true #(默认false)指定当查询结果为null时,是否会调用setter或map的put方法。(即查询为NULL时,是否依旧返回NULL,否则不返回)
    return-instance-for-empty-row: false #是否允许,当数据库查询列都为NULL时,Mybatis 返回 一个NULL实例(默认false)
    log-prefix:  #日志前缀
    log-impl: #自定义日志实现类
    #proxy-factory:
    #vfs-impl: #指定VFS实现
    use-actual-param-name: true #(这个理解可能存在有误,请自行实验)将方法参数名称,作为真实名称传递给mapper(相对于省去了@param注解)
    #configuration-factory: #自定义配置工厂类

注意:
1.spring-boot 限制了 mysql 的版本,所以配置pom时,也许会有警告让你使用5.1.44版本的mysql,当然你可以继续使用更高的版本

mybatis-spring-boot-starter 已经集成了 SqlSessionTemplate,无需单独配置
SqlSessionTemplate 与 SqlSession 对比:
SqlSessionTemplate 是线程安全,内部已经实现了对SqlSession 动态close()

@Repository
public class TestDaoImpl implements TestDao {

    @Resource
    private SqlSessionTemplate sqlSession;
}
Redis

yml配置

spring:
  redis:
    #集群配置
    #cluster:
      #max-redirects: 
      #nodes:
    #database: #数据索引
    host: 127.0.0.1 #主机IP
    password: sxk2017 #redis密码
    #线程池
    pool:
      max-active: 50 #可分配的最大连接数
      max-idle: 25 #最大的空闲连接数
      max-wait: 20000 #最大等待时间(ms)
      min-idle: 5 #最小的空闲连接数
    port: 6379#端口号
    #Redis-sentinel是Redis实例的监控管理、通知和实例失效备援服务,是Redis集群的管理工具。
    #sentinel: 
      #master: 
      #nodes: 
    #ssl: 
    timeout: 30000 #连接超时时间(ms)
    #url: #使用 url 连接redis 来取代 host port password。

spring-boot 已经集成了 spring-data-redis、Jedis,所以无需再配置RedisTemplate、StringRedisTemplate,
直接使用即可

@Autowired
RedisTemplate redisTemplate;

@Autowired
StringRedisTemplate stringRedisTemplate;

你可能感兴趣的:(java,mybatis,spring,boot)