目录
spring boot的日志管理
使用log4j
整合freemark
整合QuartZ(定时任务)
整合jdbcTemplate
整合mybatis
mytatis的其它配置
Mapper接口注解
mytatis注解方式需要在启动类注解@MapperScan(无用)
mytatis总结
整合pagehelper
spring boot切换数据源
通用mapper
整合Junit
整合spring data jpa
整合redis
redis集群
整合activeMQ
整合solr
整合elasticsearch
整合rabbitMQ
前言
spring boot的整合其实在官方都有相关的代码示例,这就只是挑一些常用的并且用自己的语言概述
spring boot基础 https://blog.csdn.net/yzj17025693/article/details/89577324
spring boot 进阶 https://blog.csdn.net/yzj17025693/article/details/90601997
spring boot全配置整理 https://blog.csdn.net/acmman/article/details/81835911
如果需要深入或者使用自定义配置文件 可以参考 https://www.cnblogs.com/bigdataZJ/p/springboot-log.html
#logging.level.root表示只输出INFO 及以上的级别的信息,也就是debug不会输出
#还可以在level后面加上包名,表示输出这个包里的信息
logging.level.root=INFO
logging.level.com.tiandi.springbootdemo=WARN
输出日志
还可以直接添加注解,上面的LoggerFactory就可以删了,并且log这个变量还在
日志文件一般配置
# priority :debug> Method: %l ]%n%p:%m%n
#debug log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.debug.File=./src/com/hp/log/debug.log
log4j.appender.debug.Append=true
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#warn log
log4j.logger.warn=warn
log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.warn.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.warn.File=./src/com/hp/log/warn.log
log4j.appender.warn.Append=true
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#error
log4j.logger.error=error
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.error.File = ./src/com/hp/log/error.log
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
freemark基础 https://blog.csdn.net/yzj17025693/article/details/90479000
添加起步依赖
定一个一个模版,模版只要在resources下的templates下,那么会自动加载
这时候只需要在对应的model里添加数据即可,model的底层其实还是request
所以在request里添加也行
这个类的注解必须是Controller,而不是RestController,因为RestController是返回的是json数据
freemark貌似不能自行解析
但是使用RestController和返回ModelAndView没有问题,因为ModelAndView是视图层和数据层的结合
但是如果没有放到templates文件夹下,就需要设置全局配置
1 cache是用不用缓存,allow-request-override是否允许request溢出,因为request可能会存太多的值
2 text/html是模版的格式,UTF-8是模版的字符集
QuartZ基础 https://blog.csdn.net/yzj17025693/article/details/85028139
spring Task基础 https://blog.csdn.net/yzj17025693/article/details/90549071
直接在方法上使用@Scheduled
fixedRate是固定的时间
而cron是表达式形式
还需要在启动类上加上@EnableScheduling
可以在dao层直接注入jdbcTemplate
连接池的配置在spring boot整合(2)里https://blog.csdn.net/yzj17025693/article/details/90741917
添加mytatis提供的起步依赖
添加mysql驱动,并不需要导入版本,因为spring boot已经管理了
datasource的其它配置百度即可
本来spring和mytatis整合后,mytatis的核心配置文件里的datasource和sqlsesion工厂都交给了spring
扫描mapper 也用动态代理给替换了
而现在数据库配置交给了spring boot, mytatis的核心配置也交给spring boot
只需要扫描别名
别名是为了在xml里配置返回值的时候,不需要加上全部路径
在接口上使用Mapper注解,这样就代替了扫描mapper接口的动态代理
这个就是相当于ComponentScan,当在mapper接口上写了@Mapper,那么这个注解彻底无用
不设置@mapperScan和mapper接口上不写@Mapper的情况下
并且不在同一个文件夹下
只需要设置mapper-locations: classpath:mapper/*Mapper.xml
即使mapper接口和配置文件不同名也可以扫描到并使用,这很神奇
当注释掉mapper-locations后
那么当接口和映射文件在同一个目录的时候,只需要在mapper接口上写@Mapper即可
不需要写@mapperScan
还需要注意的是
使用idea注入mapper,这里的红线其实是正确的,因为我们使用的是动态代理
mytatis会自动创建实现类,但是那是启动之后,所以idea识别不了
pagehelper 基础 https://blog.csdn.net/yzj17025693/article/details/89435016
第1 设置数据库类型 第2 reasonable是分页合理化参数
后面2个不写应该是不会出错的
count是计数的,统计数量的,因为pagehelper会返回一个总记录数
spring boot使用注解的方式来配置数据源,如果有多个sqlsessionFactory,需要加上@Primary注解
spring boot使用注解的方式,需要在类上使用@Configuration,具体的写法和一开始使用mytatis创建的方式一样
只不过现在拆分了
datasource
session工厂
事务管理器
sql模版
以前我们还需要写findById之类的,现在直接使用通用mapper插件,并且不用配置mapper-locations
思想比较像spring data jpa
通用mapper还有一个专门操作id的
批量插入的
这时候的mapperScan就有用了,用的是插件的mapperScan
实体类的编写
参考spring data jpa https://blog.csdn.net/yzj17025693/article/details/89514504
keySql是回显id
如果想把某个字段不作为数据的字段,那么使用Transient(瞬间)
条件查询
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
现在是spring boot,就是springRunner.class
本来@RunWith的下面是contextConfigLocation然后指定application.xml的位置
现在是springBootTest,是指定启动器的位置,因为启动器会给你自动加载配置文件
spring data jpa的配置文件在META-INF下叫persistence(持久化).xml
并且数据库连接信息也在里面,但是和spring整合后便没有了这个配置文件
现在和spring boot整合
如果数据库和表的名称一致,只需要注解一下实体类,并且配置一下id,其他属性如果名称也和数据库一致,那么不用配置
但是需要配置 hibernate.cfg.ImprovedNamestrategy,这些都是spring data jpa的知识,并不是spring boot的
ddl是 是否生成数据库的表,ImprovedNamestrategy是映射策略
这个UserRepository类是我们自己写的,继承了jpaRepository(封装了常用的CRUD)和jpaSpecificationExecutor(封装了复杂的查询)
如果你使用的是jdk9,那么还需要导入一个jar包
通用的分页查询
spring data redis的基础 https://blog.csdn.net/yzj17025693/article/details/89680347
和后面的pool开头的可以省略
datasource是代表redis的第1个数据库
redis的缓存可以参考 https://my.oschina.net/u/3452433/blog/1831026
直接可以使用spring data redis的模版
只需要把nodes全写上去,然后传入到JedisCluster
整合MongoDB
MongoDB基础 https://blog.csdn.net/yzj17025693/article/details/89888812
添加起步依赖
标准配置文件
消费生产者
这个JmsMessagingTemplate其实spring jms进一步封装,在spring 4.1之后出现的
其余的配置spring boot已经给你配置好了
convertAndSend的第一个参数Destination(目的地),由ActiveMQQueue创建返回
消费者
方法上直接使用@JmsListener就能实现监听,这是spring boot的功能
2个都运行之后会发现能获取信息,但是现在还有一个关键的就是本来应该还需要 一个activeMQ的服务的
这个服务在linux上,然后能查看有哪些消息,是因为spring boot里内置了服务,如果想要修改可以进行配置
修改配置文件
solr基础 https://blog.csdn.net/yzj17025693/article/details/90442002
elasticsearch基础 https://blog.csdn.net/yzj17025693/article/details/89636313
rabbitMQ基础 https://blog.csdn.net/yzj17025693/article/details/90739420
virtualBost是虚拟机,每个虚拟机相当于独立的mq
创建配置类,声明交换机路由
这里声明的是topic通配符交换器
还有其它的可以声明
声明队列
创绑定交换机,指定路由,noargs是不需要指定参数
@Qualifier 是按名称注入
发送消息
convertAndSend,第一个参数是交换器,第二个参数是routing key,第3个参数是message
这里是可变参数还有很多重载参数,可以如果是点对点模式(不用交换机),第一个直接填消息队列即可
监听消息
只需要在方法上加上监听的注解,想要拿到哪个数据,就写上对应的参数即可
Message也能拿到消息
完整的应该是这样,因为如果队列不存在,就会报错了
不过一般不需要这么写
publisher-confirs 是确定生产者
template是模版的参数,retry是重试的信息
如果发送失败了,就重试
10000是10秒 第1次失败后等10秒后重试,重试2次,第二次是20秒,第3次是40秒,但是不会有第3次
因为最大周期是30秒,multiplier 就是倍数