依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifact.... Spring Security SpringSecurity
热部署 <!-- 开启热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> 1.setting中compiler开启 Build project automatically 2.Ctrl+Alt+Shift+? -> 点击Registry -> 打开Compiler.automake.allow.when.app.running 监控管理 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <.... Spring Boot热部署、监控管理 SpringBoot
Spring Boot与dubbo ZooKeeper ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 Dubbo Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。 docker下载zookeeper 启动zookeeper docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper 导入依赖 <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo.... Spring Boot与分布式 SpringBoot
“认证”(Authentication),是建立一个他声明的主体的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统)。 “授权”(Authorization)指确定一个主体是否允许在你的应用程序执行一个动作的过程。为了抵达需要授权的店,主体的身份已经有认证过程建立。 SpringSecurity与SpringMVC 依赖 <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-conf.... Spring Boot与安全 SpringBoot
异步任务 @EnableAsync //开启异步注解 public class SpringbootdemoApplication { @Async //异步方法 public void async() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("处理中"); } 定时任务 Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor 、TaskScheduler 接口。 两个注解:@EnableScheduling、@Scheduled cron表达式: 字段允许值允许的特殊字符 秒0-59, - * / 分0-59, - * / 小时0-23, - * / 日期1-31, - * ? / L W C 月份1-12, - * / 星期0-7或SUN-SAT 0,7是SUN, - * ? / L C # 特殊字符代表含义 ,枚举 -区间 *任意 /步长 ?日/星期冲突匹配 L最后.... Spring Boot与任务 SpringBoot
Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,github等大型的站点也是采用了ElasticSearch作为其搜索服务, 安装 dokcer pull elasticsearch docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name 容器名称 镜像id -e设置了内存大小,防止测试环境内存不够导致启动失败,9200是默认端口 -e "discovery.type=single-node"单节点部署 Elasticsearch: 权威指南 https://www.elastic.co/guide/cn/elasticsearch/guide/2.x/index-doc.html 存储数据到 Elasticsearch 的行为叫做 索引 一个 Elasticsearch 集群可以 包含多个 索引 ,相应的每个索引可以包含多个 类型 。 这些不同.... Spring Boot与检索 SpringBoot
大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力 消息服务中两个重要概念: 消息代理(message broker)和目的地(destination) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。 消息队列主要有两种形式的目的地 队列(queue):点对点消息通信(point-to-point) 主题(topic):发布(publish)/订阅(subscribe)消息通信 点对点式: 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列 消息只有唯一的发送者和接受者,但并不是说只能有一个接收者 发布订阅式: 发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息 消息规范 (1)JMS(Java Message Service)JAVA消息服务: 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现 (2)AMQP(Advanced Message Queuing Protocol) 高级消息队列协议,.... Spring Boot与消息 SpringBoot
JSR107 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry。 CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。 CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。 Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。 Entry是一个存储在Cache中的key-value对。 Expiry 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。 JSR-107规范 提取码:uAjL Spring缓存抽象 Cache缓存接.... Spring Boot与缓存 SpringBoot
几个重要的事件回调机制 配置在 META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListener 只需要放在 IoC 容器中 ApplicationRunner CommandLineRunner 启动流程: 1、创建 SpringApplication 对象 initialize(sources); private void initialize(Object[] sources) { //保存主配置类 if (sources != null && sources.length > 0) { this.sources.addAll(Arrays.asList(sources)); } //判断当前是否一个web应用 this.webEnvironment = deduceWebEnvironment(); //从类路径下找到META-INF/spring.factories配置的所有ApplicationContextInitializer;然后保存起来 se.... Spring Boot启动配置原理 SpringBoot
JDBC <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> 错误 java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configu.... Spring Boot与数据访问 SpringBoot
1、简介 使用SpringBoot; 1)、创建SpringBoot应用,选中我们需要的模块; 2)、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3)、自己编写业务代码; 自动配置原理? 这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?xxx xxxxAutoConfiguration:帮我们给容器中自动配置组件; xxxxProperties:配置类来封装配置文件的内容; 2、SpringBoot对静态资源的映射规则; @ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false) public class ResourceProperties implements ResourceLoaderAware { //可以设置和静态资源有关的参数,缓存时间等 WebMvcAuotConfiguration: @Override public void addResourceHandlers(Res.... Spring Boot与Web SpringBoot
市面上的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j... | 日志门面 (日志的抽象层) | 日志实现 | | - | - | | JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-logging | Log4j JUL(java.util.logging) Log4j2 Logback | 左边选一个门面(抽象层)、右边来选一个实现; 日志门面: SLF4J; 日志实现:Logback; SpringBoot:底层是 Spring 框架,Spring 框架默认是用 JCL; SpringBoot 选用 SLF4j 和 logback SLF4j 的使用 如何在系统中使用 SLF4j 开发时,日志记录方法的调用,不应该调用日志类的实现类,而是调用日志抽象层的方法 给系统里面导入 slf4j 的 jar 和 logback 的实现 jar import org.slf4j.Logger; import org.slf4j.Logg.... Spring Boot与日志 SpringBoot
配置文件 SpringBoot 使用一个全局的配置文件,配置文件名是固定的;用来修改SpringBoot自动配置的默认值 application.properties 跟 yml 文件类似,二者选择其一使用 person.age=20 #map的配置形式,每个键值对分开配置 person.map.k1=v1 person.map.k2=v2 #list的配置形式,每个元素用逗号隔开 person.list=a,b,c #对象的配置形式,对象中的每个属性分开赋值 person.dog.name=dog person.dog.age=10 application.yml YAML(YAML Ain't Markup Language) 标记语言: 以前的配置文件大多都是 XML 文件 YAML:以数据为中心,比 JSON、XML 等更适合做配置文件 server: port: 8081 基本语法 k: v:表示一对键值对(值前面必须有一个空格),以空格的缩进来控制层级关系,只要是左对齐的一列数据都是同一个层级的 server: port: 8081 path: /hello 属性和值.... Spring Boot之配置 SpringBoot
示例 依赖 <?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/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.6.RELEASE</version> <relati.... Spring Boot入门 Java
POM依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> </dependency> 从数据库中验证信息并进行简单的权限验证 自定义UserDetail @Data public class User implements UserDetails { private Integer id; private String username; private String password; private Long gmtCr.... SpringSecurity简单使用 SpringBoot
点击 springinit-> 到最后选择 Spring Web,spring2.1 以上的版本从 Web 选项变成了 Spring Web pom 文件 <dependencies> <!-- web启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId&.... SpringBoot SpringBoot