- 博客(45)
- 资源 (1)
- 收藏
- 关注
原创 【分布式】整合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
原创 【分布式】dubbo和zookeeper简介
分布式应用在分布式系统中,国内常用zookeeper+dubbo组合,而spring boot推荐使用spring cloud+spring cloud。分布式系统:单一应用架构:当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构:当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆分互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的web框架(MVC)是关键。分布式服务架
2020-06-30 19:06:18 297
原创 【安全】整合spring security
spring security是针对spring项目的安全框架,也是spring boot底层安全模块默认的技术选型。它可以实现强大的web安全控制。对于安全控制,我们仅需引入spring-boot-starter-security模块,进行少量配置,即可实现强大的安全管理。应用程序的两个主要区域是认证和授权。这两个主要区域是spring security的两个目标。认证(Authentication),建立一个它声明主体的过程。授权(Authorization)指确定一个主体是否允许在你的应用程序
2020-06-30 16:17:31 147
原创 【任务】邮件任务
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
原创 【任务】定时任务
项目开发中经常需要执行一些定时任务,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 2015
原创 【异步】异步任务
示例: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 3647
原创 【检索】ElasticSearch简介和安装
简介我们的应用经常需要添加检索功能,开源的ElasticSearch是目前全文搜索引擎的首选。它可以快速的存储、搜索和分析海量数据。spring boot通过整合spring data ElasticSearch为我们提供了非常便捷的检索功能支持。ElasticSearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,GitHub等大型的站点也是采用ElasticSearch作为其搜索服务。安
2020-06-29 15:41:42 101
原创 【消息】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 136
原创 【消息】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 143
原创 【消息】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 154
原创 【消息】RabbitMQ简介
RabbitMQ是一个由Erlang开发的AMQP的开源实现。核心概念Message消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。Publisher消息的生产者,也是一个向交换器发布消息的客户端应用程序。Exchange交换器用来接收生产者发送的消息并将这些消息路由给服务器中的队列。Exchange
2020-06-28 15:31:55 108
原创 【消息】JMS和AMQP简介
概述1、大多数应用中,可通过消息服务中间件来提升系统的异步通信、扩展解耦能力。2、消息服务中两个重要概念:消息代理(message broker)和目的地(destination)。当消息发送者发送消息以后,将有消息代理接管,消息代理保证消息传递到目的地。3、消息队列主要有两种形式的目的地:队列(queue):点对点消息通信。主题(topic):发布(publish)/订阅(subscribe)消息通信。4、点对点式:消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取
2020-06-28 14:54:18 250
原创 【缓存】自定义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 998
原创 【缓存】整合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 171 1
原创 【缓存】@Caching和@CacheConfig
@Caching功能:定义复杂的缓存规则示例:在【缓存】@CachePut的基础上进行修改:EmployeeService类中添加方法: @Caching( cacheable = { @Cacheable(value = "emp",key = "#lastName") }, put = { @CachePut(value = "emp",
2020-06-26 16:42:57 907
原创 【缓存】@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 16005 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 2303
原创 【缓存】进一步分析@Cacheable
@Cacheable功能:将方法的运行结果进行缓存,以后再要相同数据,直接从缓存中获取,不用调用方法属性:value/cacheNames:指定缓存的名字。cacheManager管理多个Cache组件,对缓存的真正操作在Cache组件中,每一个缓存组件有自己唯一一个名字。是数组的方式,可以指定多个缓存。key:缓存数据时用的key,默认是使用方法参数的值,可以使用SpEL。keyGenerator:key的生成器,可以自己指定key的生成器的组件id,key/keyGenerator二选一使
2020-06-26 15:09:23 720
原创 【缓存】缓存的工作原理
原理1、自动配置类:CacheAutoConfiguration2、缓存的配置类:3、哪个配置类默认生效:SimpleCacheConfiguration4、给容器中注册了一个CacheManager:ConcurrentMapCacheManager。5、可以获取或创建ConcurrentMapCacheManager类型的缓存组件,它的作用是将数据保存在ConcurrentMap中运行流程(以@Cacheable为例):1、方法运行之前,先去查询Cache(缓存组件),按照cacheNa
2020-06-26 11:03:42 535
原创 【缓存】@Cacheable
@Cacheable功能:将方法的运行结果进行缓存,以后再要相同数据,直接从缓存中获取,不用调用方法属性:value/cacheNames:指定缓存的名字。cacheManager管理多个Cache组件,对缓存的真正操作在Cache组件中,每一个缓存组件有自己唯一一个名字。key:缓存数据时用的key,默认是使用方法参数的值,可以使用SpEL。keyGenerator:key的生成器,可以自己指定key的生成器的组件id,key/keyGenerator二选一使用。cacheManager:
2020-06-26 10:05:01 377
原创 【缓存】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 219
原创 【原理】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 202
原创 【原理】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
原创 【数据访问】整合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 128
原创 【数据访问】整合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
原创 【数据访问】整合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 94 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 218
原创 【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 125
原创 【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 204
原创 【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 490
原创 【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 144
原创 【web开发】国际化
1. 国际化编写国际化配置文件。springboot自动配置好了管理国际化资源文件的组件。 //MessageSourceAutoConfiguration类中 @Bean @ConfigurationProperties( prefix = "spring.messages" ) public MessageSourceProperties messageSourceProperties() { return new Message
2020-06-10 15:36:43 324
原创 【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 147
原创 【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
原创 【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 417
原创 【日志】SLF4j的使用
在开发时,日志记录方法的调用,不应该直接调用日志的实现类(logback),而是调用日志抽象层(SLF4j)里面的方法。每一个日志的实现框架都有自己的配置文件。使用SLF4j以后,配置文件还是做成日志实现框架的配置文件。其他日志框架统一转换为SLF4j统一日志记录,即使是别的框架也一起使用SLF4j进行输出:如何让系统中所有日志都统一到SLF4j:将系统中其他日志框架先排除出去;用中间包来替换原有的日志框架;导入SLF4j的其他实现。springboot日志关系D:\my_mave
2020-06-08 19:17:53 140
原创 【配置】外部配置加载顺序
springboot可以从以下位置加载配置,优先级从高到低,高优先级的配置覆盖低优先级的配置,所有配置会形成互补配置:命令行参数(多个配置用空格分开–配置项=值):java -jar 项目名.jar --server.port=8087jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件。运行命令后自动加载:java -jar 项目名.jarjar包内部的application-{p
2020-06-07 16:09:51 142
原创 【配置】配置文件加载位置
springboot启动会扫描以下位置的application.properties或者application.yml文件作为springboot的默认配置文件:file:./config/file:./classpath:/config/classpath:/以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容。(互补配置)还可以通过spring.config.location来改变默认的配置文件位置:spring.config.locati
2020-06-07 15:21:40 200
原创 【配置】Profile多环境支持
Profile是spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。1. 多profile文件形式:在编写主配置文件时,文件名可以是application-{profile}.properties/yml,例如application-dev.properties、application-prod.properties。默认使用application.properties的配置。2. yaml支持多文档块模式server: port: 8081sprin
2020-06-07 14:56:49 142
原创 【配置】配置文件占位符
配置文件中可以用随机数:${random.value}${random.int}${random.long}${random.int(10)}${random.int[1024,65536]}占位符获取之前配置的值,如果没有可以使用==:==指定默认值:# 配置Person的值person.last-name=lisi${random.uuid}person.age=${random.int}person.birth=2020/12/15person.boss=false.
2020-06-07 14:25:56 344
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人