spring-boot 学习之路
2017-12-12 17:28
381 查看
搭建
扩展一
spring-boot-devtools 组件
扩展二
使用YAML 配置
server配置
自定义启动横幅
druid配置
mybatis-spring-boot-starter
Redis
编辑pom.xml,新增如下配置:
新建 一个 应用程序 - application-> SpringBootApplication
新建 一个 controller -> HelloController
启动(run)SpringBootApplication ->main-> 并访问 -> http://localhost:8080/
成功输出-搭建完成
项目结构:
own
+- application
+- SpringBootApplication.java
|
+- test
+- controller
+- HelloController.java
devtools 是开发者工具,能自动识别开发环境和生产环境(用java -jar 运行项目),并自动禁用启用以下功能。
1.静态文件、模板文件、资源文件缓存
2.session 持久化、控制台输出功能
3.修改内容自动重启
……
自定义启动横幅
banners设置
druid配置
全部配置如下
精简配置(根据自己的需要):
mybatis-spring-boot-starter
yml配置:
注意:
1.spring-boot 限制了 mysql 的版本,所以配置pom时,也许会有警告让你使用5.1.44版本的mysql,当然你可以继续使用更高的版本
mybatis-spring-boot-starter 已经集成了 SqlSessionTemplate,无需单独配置
SqlSessionTemplate 与 SqlSession 对比:
SqlSessionTemplate 是线程安全,内部已经实现了对SqlSession 动态close()
Redis
yml配置
spring-boot 已经集成了 spring-data-redis、Jedis,所以无需再配置RedisTemplate、StringRedisTemplate,
直接使用即可
扩展一
spring-boot-devtools 组件
扩展二
使用YAML 配置
server配置
自定义启动横幅
druid配置
mybatis-spring-boot-starter
Redis
搭建
用IDE新建一个 web project(maven)项目 -> my-spring-boot编辑pom.xml,新增如下配置:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
新建 一个 应用程序 - application-> SpringBootApplication
package own.application; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; im 4000 port 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/
成功输出-搭建完成
项目结构:
own
+- application
+- SpringBootApplication.java
|
+- test
+- controller
+- HelloController.java
扩展一
spring-boot-devtools 组件
再pom - dependencies 下添加配置:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </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 # 16975 启用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<Object, Object> redisTemplate; @Autowired StringRedisTemplate stringRedisTemplate;
相关文章推荐
- spring boot 学习之路5(打成war包部署tomcat)
- springboot 学习之路 2(注解介绍)
- SpringBoot学习之路:11.Spring Boot中添加Interceptor应用
- SpringBoot学习之路:03.Spring Boot使用Jpa操作数据库
- spring boot 学习之路2(注解介绍)
- springboot 学习之路 17(webflux 入门 (1))
- spring boot 学习之路3( 集成mybatis )
- SpringBoot学习之路:12.Spring Boot使用idea开发如何配置热加载
- Spring Boot学习之路——自定义拦截器
- springboot 学习之路 9 (项目启动后就执行特定方法)
- SpringBoot学习之路:13.SpringBoot使用Lombok简化JavaBean代码
- springboot 学习之路 20 (整合RabbitMQ)
- springboot 学习之路 8 (整合websocket(1))
- spring boot 学习之路
- SpringBoot学习之路:05.Spring Boot集成pagehelper分页插件
- SpringBoot学习之路:10.Spring Boot中添加Listener应用
- springboot 学习之路 22 (读取自定义文件)
- springboot 学习之路 14(整合mongodb的Api操作)
- java架构师、集群、高可扩展、高性能、高并发、性能优化、Spring boot、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师之路
- SpringBoot学习之路:01.开发环境搭建及概念叙述