![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring boot
RB_VER
这个作者很懒,什么都没留下…
展开
-
【微服务】整合spring cloud hystrix
首先需要按这两篇文章【微服务】整合spring cloud eureka【微服务】整合spring cloud config配置eureka server和config server,还有一个服务提供者。由于我们只需在服务消费者中验证断路器模式,这里只放上consumer项目和hystrix dashboard项目代码:user-service-consumerpom.xml<?xml version="1.0" encoding="UTF-8"?><project xml原创 2020-09-10 10:53:10 · 128 阅读 · 0 评论 -
【微服务】整合spring cloud config
技术架构:首先在GitHub新建一个仓库用来存放配置文件:编写config serverpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apac原创 2020-09-09 15:09:48 · 148 阅读 · 0 评论 -
【热部署】devtools开发热部署
热部署在开发中我们修改一个java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望在不重启应用的情况下,程序可以自动部署。有以下四种情况实现热部署:模板引擎:在spring boot中开发情况下禁用模板引擎的cache,页面模板改变ctrl+f9可以重新编译当前页面并生效。spring loaded:spring官方提供的热部署程序,实现修改类文件的热部署。JRebel:收费的热部署软件,安装插件使用即可。spring boot Devtools(推荐):引入依赖后,IDEA使用CT原创 2020-07-01 19:05:20 · 225 阅读 · 0 评论 -
【微服务】整合spring cloud eureka
spring cloudspring cloud是一个分布式的整体解决方案。spring cloud为开发者提供了在分布式系统(配置管理、服务发现、熔断、路由、微代理、控制总线、一次性token、全局锁、leader选举、分布式session、集群状态)中快速构建的工具,使用spring cloud的开发者可以快速的启动服务或构建应用,同时能够快速和云平台资源进行对接。spring cloud分布式开发五大常用组件:服务发现——Netflix Eureka客户端负载均衡——Netflix Ribb原创 2020-07-01 17:14:48 · 130 阅读 · 0 评论 -
【分布式】整合Dubbo和Zookeeper
首先用docker拉取zookeeper镜像,并运行容器:docker pull zookeeperdocker run --name zk01 -p 2181:2181 --restart always -d zookeeper1、将服务提供者注册到注册中心:引入dubbo相关依赖。配置dubbo的扫描包和注册中心地址。使用@Service发布服务。2、将服务消费者注册到注册中心:引入依赖。配置dubbo的注册中心地址。引用服务。首先需要创建一个项目其中包含两个模块:p原创 2020-06-30 21:01:23 · 115 阅读 · 0 评论 -
【分布式】dubbo和zookeeper简介
分布式应用在分布式系统中,国内常用zookeeper+dubbo组合,而spring boot推荐使用spring cloud+spring cloud。分布式系统:单一应用架构:当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构:当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆分互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的web框架(MVC)是关键。分布式服务架原创 2020-06-30 19:06:18 · 287 阅读 · 0 评论 -
【安全】整合spring security
spring security是针对spring项目的安全框架,也是spring boot底层安全模块默认的技术选型。它可以实现强大的web安全控制。对于安全控制,我们仅需引入spring-boot-starter-security模块,进行少量配置,即可实现强大的安全管理。应用程序的两个主要区域是认证和授权。这两个主要区域是spring security的两个目标。认证(Authentication),建立一个它声明主体的过程。授权(Authorization)指确定一个主体是否允许在你的应用程序原创 2020-06-30 16:17:31 · 144 阅读 · 0 评论 -
【任务】邮件任务
1、邮件发送需要引入spring-boot-starter-mail2、spring boot自动配置MailSenderAutoConfiguration3、定义MailProperties内容,配置application.yml中4、自动装配JavaMailSender5、测试邮件发送首先需要进入qq邮箱中设置-账户中开启相关服务,其中生成的授权码用作配置文件中的密码:示例:pom.xml<?xml version="1.0" encoding="UTF-8"?><原创 2020-06-29 20:25:36 · 301 阅读 · 0 评论 -
【任务】定时任务
项目开发中经常需要执行一些定时任务,spring为我们提供了异步执行任务调度的方式,提供TaskExecutor、TaskScheduler接口。示例:pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch原创 2020-06-29 19:23:28 · 2014 阅读 · 0 评论 -
【异步】异步任务
示例:pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd原创 2020-06-29 19:01:02 · 3630 阅读 · 0 评论 -
【检索】ElasticSearch简介和安装
简介我们的应用经常需要添加检索功能,开源的ElasticSearch是目前全文搜索引擎的首选。它可以快速的存储、搜索和分析海量数据。spring boot通过整合spring data ElasticSearch为我们提供了非常便捷的检索功能支持。ElasticSearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,GitHub等大型的站点也是采用ElasticSearch作为其搜索服务。安原创 2020-06-29 15:41:42 · 101 阅读 · 0 评论 -
【消息】RabbitMQ整合
自动配置:1、RabbitAutoConfiguration2、自动配置了连接工厂CachingConnectionFactory3、RabbitProperties封装了RabbitMQ的配置4、RabbitTemplate:给RabbitMQ发送和接收消息5、AmqpAdmin:系统管理功能组件。AmqpAdmin用来创建和删除queue、exchange、Binding6、@EnableRabbit+@RabbitListener来监听消息队列里的内容。示例:pom.xml<?原创 2020-06-28 20:59:47 · 133 阅读 · 0 评论 -
【消息】RabbitMQ安装测试
安装首先拉取RabbitMQ镜像并运行容器:docker pull rabbitmq:3.8-managementdocker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq rabbitmq:3.8-management其中5672是客户端和RabbitMQ通信的端口,15672是管理界面访问web页面的端口。测试1、登陆http://192.168.30.128:15672/进入RabbitMQ管理界面,默认用户名和密码为gues原创 2020-06-28 18:53:02 · 134 阅读 · 0 评论 -
【消息】RabbitMQ运行机制
AMQP中的消息路由AMQP中消息的路由过程和Java开发者熟悉的JMS存在一些差别,AMQP中增加了Exchange和Binding的角色。生产者把消息发布到Exchange上,消息最终到达队列并被消费者接收,而Binding决定交换器的消息应该发送到那个队列。Exchange类型Exchange分发消息时根据类型的不同分发策略有区别,目前共4种类型:direct、fanout、topic、headers。headers匹配AMQP消息的header而不是路由键,headers交换器和direct原创 2020-06-28 15:53:06 · 142 阅读 · 0 评论 -
【消息】RabbitMQ简介
RabbitMQ是一个由Erlang开发的AMQP的开源实现。核心概念Message消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。Publisher消息的生产者,也是一个向交换器发布消息的客户端应用程序。Exchange交换器用来接收生产者发送的消息并将这些消息路由给服务器中的队列。Exchange原创 2020-06-28 15:31:55 · 107 阅读 · 0 评论 -
【消息】JMS和AMQP简介
概述1、大多数应用中,可通过消息服务中间件来提升系统的异步通信、扩展解耦能力。2、消息服务中两个重要概念:消息代理(message broker)和目的地(destination)。当消息发送者发送消息以后,将有消息代理接管,消息代理保证消息传递到目的地。3、消息队列主要有两种形式的目的地:队列(queue):点对点消息通信。主题(topic):发布(publish)/订阅(subscribe)消息通信。4、点对点式:消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取原创 2020-06-28 14:54:18 · 248 阅读 · 0 评论 -
【缓存】自定义CacheManager
原理:1、CacheManager(缓存管理器)创建Cache(缓存组件),缓存组件来实际的给缓存中存储数据。2、引入redis的starter,容器中保存的是RedisCacheManager。3、RedisCacheManager帮我们创建RedisCache。RedisCache通过操作Redis来缓存数据。4、当k-v都是Object的时候,默认使用序列化保存数据,我们可以使用json格式序列化和反序列化缓存的键-值。示例:在【缓存】整合Redis的基础上进行修改:MyRedisCon原创 2020-06-27 10:58:37 · 988 阅读 · 0 评论 -
【缓存】整合Redis
Redis是一个开源(BSD许可)的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。在docker中拉取并启动redis镜像:docker pull redisdocker run -d -p 6379:6379 --name myredis redisRedis常见的五大数据类型:String、List、Set、Hash、ZSet(有序集合)@AutowiredStringRedisTemplate stringRedisTemplate; //k-v都是字符串的@Aut原创 2020-06-26 19:45:36 · 164 阅读 · 1 评论 -
【缓存】@Caching和@CacheConfig
@Caching功能:定义复杂的缓存规则示例:在【缓存】@CachePut的基础上进行修改:EmployeeService类中添加方法: @Caching( cacheable = { @Cacheable(value = "emp",key = "#lastName") }, put = { @CachePut(value = "emp",原创 2020-06-26 16:42:57 · 896 阅读 · 0 评论 -
【缓存】@CacheEvict
@CacheEvict功能:缓存清除。示例:在【缓存】@CachePut的基础上进行修改:EmployeeService类:package com.qublog.cache.service;import com.qublog.cache.bean.Employee;import com.qublog.cache.mapper.EmployeeMapper;import org.springframework.beans.factory.annotation.Autowired;impor原创 2020-06-26 16:18:20 · 15979 阅读 · 1 评论 -
【缓存】@CachePut
@CachePut功能:既调用方法又更新缓存数据。修改了数据库中的数据,同时更新缓存。运行时机:1、先调用目标方法2、将目标方法的结果缓存起来测试步骤:1、查询1号员工http://localhost:8080/emp/1,查到的结果放到缓存中。2、更新1号员工 http://localhost:8080/emp?id=1&lastName=zhangsan&gender=03、查询1号员工http://localhost:8080/emp/1,显示没更新前的员工,原因是第一原创 2020-06-26 15:48:44 · 2293 阅读 · 0 评论 -
【缓存】进一步分析@Cacheable
@Cacheable功能:将方法的运行结果进行缓存,以后再要相同数据,直接从缓存中获取,不用调用方法属性:value/cacheNames:指定缓存的名字。cacheManager管理多个Cache组件,对缓存的真正操作在Cache组件中,每一个缓存组件有自己唯一一个名字。是数组的方式,可以指定多个缓存。key:缓存数据时用的key,默认是使用方法参数的值,可以使用SpEL。keyGenerator:key的生成器,可以自己指定key的生成器的组件id,key/keyGenerator二选一使原创 2020-06-26 15:09:23 · 702 阅读 · 0 评论 -
【缓存】缓存的工作原理
原理1、自动配置类:CacheAutoConfiguration2、缓存的配置类:3、哪个配置类默认生效:SimpleCacheConfiguration4、给容器中注册了一个CacheManager:ConcurrentMapCacheManager。5、可以获取或创建ConcurrentMapCacheManager类型的缓存组件,它的作用是将数据保存在ConcurrentMap中运行流程(以@Cacheable为例):1、方法运行之前,先去查询Cache(缓存组件),按照cacheNa原创 2020-06-26 11:03:42 · 533 阅读 · 0 评论 -
【缓存】@Cacheable
@Cacheable功能:将方法的运行结果进行缓存,以后再要相同数据,直接从缓存中获取,不用调用方法属性:value/cacheNames:指定缓存的名字。cacheManager管理多个Cache组件,对缓存的真正操作在Cache组件中,每一个缓存组件有自己唯一一个名字。key:缓存数据时用的key,默认是使用方法参数的值,可以使用SpEL。keyGenerator:key的生成器,可以自己指定key的生成器的组件id,key/keyGenerator二选一使用。cacheManager:原创 2020-06-26 10:05:01 · 361 阅读 · 0 评论 -
【缓存】spring抽象缓存简介
JSR 107Java Caching定义了5个核心接口,分别是CachingProvider、CacheManager、Cahce、Entry和Expiry。CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以运行在运行期访问多个CachingProvider。CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个Cachi原创 2020-06-26 09:58:23 · 208 阅读 · 0 评论 -
【原理】springboot自定义starters
场景启动器starter:1、这个场景需要使用到的依赖是什么?2、如何编写自动配置?自动装配Bean:自动装配使用配置类(@Configuration)结合spring4提供的条件判断注解@Conditional及spring boot派生注解如@ConditionalOnClass完成。配置自动装配Bean:将标注@Configuration的自动配置类,放在META-INF/spring.factories文件中。@Configuration //指定这个类是一个配置类@Conditio原创 2020-06-24 19:28:25 · 197 阅读 · 0 评论 -
【原理】spring boot启动配置原理
启动流程SpringApplication类: public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) { return (new SpringApplication(primarySources)).run(args); }1、创建SpringApplication对象。 //SpringApplication类中原创 2020-06-23 21:12:48 · 110 阅读 · 0 评论 -
【数据访问】整合springdata JPA
Spring Data简介spring data项目的目的是为了简化构建基于spring框架应用的数据访问技术,包括非关系数据库、Map-Reduce框架、云数据服务等,另外也包含对关系数据库的访问支持。Spring Data特点spring data为我们提供使用统一的API来对数据访问层进行操作,这主要是Spring Data Commons项目来实现的。Spring Data Commons让我们在使用关系型或者非关系型数据访问技术时都基于spring提供统一标准,标准包含了CRUD、排序和分页原创 2020-06-22 19:47:56 · 127 阅读 · 0 评论 -
【数据访问】整合mybatis【配置文件方式】
在【数据访问】整合mybatis【注解方式】的基础上进行修改:EmployeeMapper类:package com.qublog.springboot06_data_mybatis.mapper;import com.qublog.springboot06_data_mybatis.bean.Employee;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface EmployeeMapper { p原创 2020-06-22 16:49:14 · 97 阅读 · 0 评论 -
【数据访问】整合mybatis【注解方式】
pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/mav原创 2020-06-22 16:12:49 · 93 阅读 · 1 评论 -
【数据访问】整合基本JDBC与Druid数据源
JDBCpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xs原创 2020-06-22 14:45:33 · 211 阅读 · 0 评论 -
【web开发】使用外置servlet容器
嵌入式servlet容器将项目打包成可执行的jar包。优点:简单、便携。缺点:默认不支持JSP,优化定制比较复杂。外置的servlet容器:在外面安装tomcat,将应用打包成war包。使用方法1)必须创建一个war项目(用IDEA创建好目录结构)。2)将嵌入式的tomcat指定为provided: <dependency> <groupId>org.springframework.boot</groupId>原创 2020-06-14 20:01:09 · 124 阅读 · 0 评论 -
【web开发】注册servlet的三大组件(Servlet、Filter、Listener)
由于springboot默认以jar包方式启动嵌入式的servlet容器来启动springboot的web应用,没有web.xml文件。要注册三大组件用以下方式:ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean示例:在【web开发】配置嵌入式Servlet容器的基础上进行修改:MyServerConfig类:package com.qublog.springboot03_web_res原创 2020-06-13 20:33:02 · 198 阅读 · 0 评论 -
【web开发】配置嵌入式Servlet容器
springboot默认使用的是嵌入式的servlet容器(tomcat):定制和修改servlet容器的相关配置1)修改和server有关的配置(ServerProperties类):server.port=8080server.servlet.context-path=/crud通用的servlet容器设置:server.xxxtomcat的设置:server.tomcat.xxx2)编写一个WebServerFactoryCustomizer类(嵌入式的servlet容器的定原创 2020-06-13 19:34:59 · 487 阅读 · 0 评论 -
【web开发】登陆+拦截器+CRUD
开发期间模板引擎页面修改以后,要实时生效:1)禁用模板引擎的缓存:application.properties#禁用缓存spring.thymeleaf.cache=false2)页面修改完成以后ctrl+f9重新编译。3)拦截器进行登陆检查。4)RESTfulCRUD:CRUD满足REST风格。URI:/资源名称/资源标识 HTTP请求方式区分对资源CRUD普通CRUD (URI来区分操作)RESTfulCRUD查询getEmpemp—GET添加原创 2020-06-13 10:09:12 · 141 阅读 · 0 评论 -
【web开发】国际化
1. 国际化编写国际化配置文件。springboot自动配置好了管理国际化资源文件的组件。 //MessageSourceAutoConfiguration类中 @Bean @ConfigurationProperties( prefix = "spring.messages" ) public MessageSourceProperties messageSourceProperties() { return new Message原创 2020-06-10 15:36:43 · 321 阅读 · 0 评论 -
【web开发】扩展与全面接管springmvc
1. 扩展springmvc方法:编写一个配置类(@Configuration),实现WebMvcConfigurer接口,不能标注@EnableWebMvc。特点:既保留了springboot所有的自动配置,也能用我们扩展的配置。示例:pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o原创 2020-06-09 19:37:21 · 145 阅读 · 0 评论 -
【web开发】thymeleaf模板引擎
模板引擎springboot推荐使用thymeleaf模板引擎,它的语法简单,功能强大。引入Thymeleaf <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency原创 2020-06-09 16:10:14 · 132 阅读 · 0 评论 -
【web开发】webjars和静态资源映射规则
springboot对静态资源的映射规则WebMvcAutoConfiguration类中addResourceHandlers方法: public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling原创 2020-06-09 14:53:28 · 411 阅读 · 0 评论 -
【日志】SLF4j的使用
在开发时,日志记录方法的调用,不应该直接调用日志的实现类(logback),而是调用日志抽象层(SLF4j)里面的方法。每一个日志的实现框架都有自己的配置文件。使用SLF4j以后,配置文件还是做成日志实现框架的配置文件。其他日志框架统一转换为SLF4j统一日志记录,即使是别的框架也一起使用SLF4j进行输出:如何让系统中所有日志都统一到SLF4j:将系统中其他日志框架先排除出去;用中间包来替换原有的日志框架;导入SLF4j的其他实现。springboot日志关系D:\my_mave原创 2020-06-08 19:17:53 · 139 阅读 · 0 评论