MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。 MongoDB中的一条记录就是一个文档,是一个数据结构,由字段和值对组成。...MongoDB支持OS X、Linux及Windows等操作系统,并提供了Python,PHP,Ruby,Java及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。...spring-boot-starter-data-mongodb 2、在application.properties中添加配置...到此springboot对应mongodb的增删改查功能已经全部实现。...Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。
SpringBoot中的IoC (原创内容,转载请注明来源,谢谢) 一、Spring IoC IoC又称为依赖反转,有两种方式,一种是DI(依赖注入),另一种是DL(依赖查找)。...但是构建IoC容器的背后,更多的是DI。 1、Spring IoC DI流程 1)收集和注册 第一阶段是构建和收集Bean,通常通过XML或者java代码的方式进行构建和定义。...早期Spring可以通过xml进行此工作,但是Springboot中,更趋向于使用Annotation的方式,即@注解的方式。...2、Java Config 基于Java Config的方式,即对Annotation的完美实现。 1)表达形式层面 对于以前复杂的bean的xml的配置,现在可以用注解的方式来实现。...对于某个bean,如果依赖于其他的bean,则只需要在该方法返回值的new构造方法中,传入所依赖的bean对应的方法即可。
在该方法中可以做类似校验的功能。如果返回 true,则继续调用下一个拦截器。如果返回 false,则中断执行,也就是说我们想调用的方法 不会被执行,但是你可以修改 response 为你想要的响应。...当处理程序启动一个异步请求时,它会在DispatcherServlet 不调用的情况下退出postHandle,afterCompletion就像它通常为同步请求所做的那样,因为请求处理的结果(例如 ModelAndView...实现可以使用提供的请求和响应,但应避免以与处理程序的并发执行冲突的方式修改它们。此方法的典型用途是清理线程局部变量。...>>>>>>>>>>> >>>>> MyInterceptor afterCompletion >>>>>>>>>>>>>>>>>>>>>> 运行流程如下: 拦截器执行顺序是按照Spring配置文件中定义的顺序而定的...Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/springboot中的handlerinterceptoradapter
springboot中SPI机制 一、从java类加载机制说起 java中的类加载器负载加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。...Bootstrap ClassLoader:负责加载JDK自带的rt.jar包中的类文件,是所有类加载的父类 Extension ClassLoader:负责加载java的扩展类库从jre/lib/ect...3、springboot中的类SPI扩展机制 在springboot的自动装配过程中,最终会加载META-INF/spring.factories文件,而加载的过程是由SpringFactoriesLoader...从CLASSPATH下的每个Jar包中搜寻所有META-INF/spring.factories配置文件,然后将解析properties文件,找到指定名称的配置后返回。...需要注意的是,其实这里不仅仅是会去ClassPath路径下查找,会扫描所有路径下的Jar包,只不过这个文件只会在Classpath下的jar包中。
SpringBoot下Akka的简单使用 Akka框架实现一个异步消息传输,通过定义演员来处理业务逻辑。 首先引入依赖 ActorSystem actorSystem = ActorSystem.create(); //通过这个系统管理对象创建actor,并返回当前actor的地址,...可以理解成现实生活中用户的一个邮箱地址 //使用actorSystem.actorOf定义一个名为actorNormal的ActorRef ActorRef actor...= actorSystem.actorOf(Props.create(ActorNormal.class), "actorNormal"); //发送消息Object msg(发送消息的内容...", notes = "带构造函数的演员", httpMethod = "Get") public void AkkaAskStruct() { ActorSystem
@Import注解算是SpringBoot自动配置原理中一个很重要的注解 认识@Import注解 先看一下源码 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME...context.getBean(Tom.class); System.out.println(tom); } } @Import用法 第一种普通组件 @Import({ 要导入的容器中的组件...其实SpringBoot的自动配置就是@Import的一个应用 @SuppressWarnings("deprecation") @Target(ElementType.TYPE) @Retention...容器中 其实这三种用法也算是一种用法,就是导入一个类到容器,容器根据类的注解类型等信息对不同类进行不同处理; 方法一:导入一个Configuration组件,组件创建了一个Tom类的Bean; 方法二:...CustomSelector返回的类的全限定类名,实际上要导入到容器中的组件全类名; 方法三:ImportBeanDefinitionRegistrar类似于第二种ImportSelector用法,只不过这种用法能自定义化注册
Import注解在4.2之前只支持导入配置类 在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean。 在 spring boot 的配置类中的使用比较多。...1.测试 @Import 的自动导入功能 1.一个配置类 @Configuration @Import(ImportDemo.class) public class ImportConfig {...} 2.一个普通没有加任何注解的类 public class ImportDemo { public void doSomething () { System.out.println...AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.springboot.importtest...证明,ImportDemo 是由 @Import 动态注入到 spring 容器中的
springboot 自定义 cache 原理:在 SpringBoot 的 Cache 中,会默认使用 SimpleCacheManager, 生成一个 KeyGenerator(),将数据保存在 ConcurrentMap...中 也就是重写一个 MyCacheConfig类,来覆盖 @EnableCaching默认的方法 ?...在 spring 配置文件中定义,必须指定至少一个 例如 @Cacheable(value=”mycache”)@Cacheable(value={”cache1”,”cache2”} key 缓存的...@CachePut 注释,这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中,实现缓存与数据库的同步更新。...【1号员工没有在缓存中更新】 ? 现在将 1 号数据更改 ? 再查就是 maoli 了 ? ? ## @CacheEvict @CacheEvict 缓存清除 key:指定要清除的数据 ?
SpringBoot的自动装配是拆箱即用的基础,也是微服务化的前提。其实它并不那么神秘,我在这之前已经写过最基本的实现了,大家可以参考这篇文章。...一、自动装配过程分析 1.1、关于@SpringBootApplication 我们在编写SpringBoot项目时,@SpringBootApplication是最常见的注解了,我们可以看一下源代码:...更多相关内容:SpringBoot内容聚合 1.2、@EnableAutoConfiguration 一旦加上此注解,那么将会开启自动装配功能,简单点讲,Spring会试图在你的classpath下找到所有配置的...但是该类在SpringBoot1.5.X版本已经过时了,因此我们看一下它的父类AutoConfigurationImportSelector: /* * Copyright 2012-2017 the...更多相关内容:SpringBoot内容聚合 回过头来我们看一下AutoConfigurationImportSelector的selectImport方法: @Override public String
今天介绍 SpringBoot 的数据缓存。...=com.mysql.cj.jdbc.Driver #我把ip去掉了,33306是我docker中的mysql端口转发,MyBatis数据库,useSSL=false连接外网 # 这里是jdbc:mysql...) { return employeeService.getEmpByLastName(lastName); } } 缓存用 @Cacheable 封装在 server 服务中的...SimpleCacheConfiguration 运行流程: 方法运行之前,先去查询 Cache(缓存组件),按照 cacheNames 指定的名字去缓存中获取(CacheManager 先获取相应的缓存...去 Cache 中查找缓存的内容,使用一个 key(默认是方法的参数),其中 key 是按照某种策略生成的,默认是使用 SimpleKeyGenerator 生成的。
在这篇文章中聊一聊 Spring 中的扩展机制(一)中对Spring中的事件机制进行了分析。那么对于 SpringBoot 来说,它在 Spring 的基础上又做了哪些拓展呢?...本篇将来聊一聊 SpringBoot 中的事件。 在 SpringBoot 的启动过程中,会通过 SPI 机制去加载 spring.factories 下面的一些类,这里面就包括了事件相关的类。...SpringBoot 启动过程中的事件阶段 这里回到 SpringApplication的run方法,看下 SpringBoot 在启动过程中,各个事件阶段做了哪些事情。...小结 到此,SpringBoot 中的事件相关的东西就结束了。...最后介绍了 SpringBoot中的内置的这些 监听器在启动过程中对应的各个阶段。
springboot中的常用任务 今天给大家分析一些springboot中常用的任务如: 异步啊 邮件发送 定时任务 异步任务 为什么我们需要异步的任务?...我们需要将收到请求在处理的结果返回给前端,处理的过程开辟线程执行,不影响用户做其他操作 在 Spring Boot 中,我们不需要手动创建线程异步执行耗时任务,因为 Spring 框架已提供了相关异步任务执行解决方案...在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。 一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。...,我们可以通过邮箱都方式发送验证码,或者是一些需要推送到文件 首先要去qq邮箱开启服务 spring配置文件中的邮件配置 spring.mail.username=3132774018@qq.com...springboot常用的三中任务的使用和示例代码了
大家好,又见面了,我是你们的朋友全栈君。...@ApiModelProperty()注解用于方法、字段,表示对model属性的说明或者数据操作更改,以下是它的源码: // IntelliJ API Decompiler stub source...举个简单的例子: @ApiModel(value="user", description="users") public class UserVO implements Serializable{
在 List 的两端访问元素是非常快的,但是如果要访问一个很大的 List 中的中间部分的元素就会比较慢了,时间复杂度是 O(N)。 Set(集合类型) Set 的一个重要特性是不允许重复元素。...向集合中添加多次相同的元素,集合中只存在一个该元素。在实际应用中,这意味着在添加一个元素前不需要先检查元素是否存在。...不同之处在于,有序集合中的每个成员都关联一个 Score,Score 是在排序时候使用的,按照 Score 的值从小到大进行排序。集合中每个元素是唯一的,但 Score 有可能重复。...Pom.xml 中引用相关的依赖 中的, ?
SpringBoot中的@Conditional注解 一、介绍 在Spring的应用下,我们希望一些bean可以通过一些条件来判断是否需要实例化,并加载到spring容器中。...类型,当指定的所有类的 bean 都包含在 BeanFactory 中时,此条件才匹配 */ Class<?...type() default {}; /** * 检查bean的注解类型,当指定的所有注解都在 BeanFactory 中的 bean 上定义时,此条件才匹配 */ Class的所有 bean 名称都包含在 BeanFactory 中时,此条件才匹配。...; /** * 可能在其通用参数中包含指定 bean 类型的其他类。
如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 executor.setRejectedExecutionHandler...中的方法名,表明executeAsync方法进入的线程池是asyncServiceExecutor方法创建的。...: end executeAsync 通过以上日志可以发现,[async-service-]是有多个线程的,显然已经在我们配置的线程池中执行了,并且每次请求中,controller的起始和结束日志都是连续打印的...、submit等方法,在里面调用showThreadPoolInfo方法,这样每次有任务被提交到线程池的时候,都会将当前线程池的基本情况打印到日志中; 修改ExecutorConfig.java的asyncServiceExecutor...如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 executor.setRejectedExecutionHandler
其实springBoot 的配置文件总共可以放到四个地方,优先级如下: 项目根目录下的config目录中 项目根目录下 classPath下的config目录中 classpath 目录下 优先级从上到下...对于1,2 的方式,其实在我们运维的时候是有用的。这里个大家提一下。 通常我们springBoot项目部署的时候,都是打成一个jar包,然后放到对应的机器上,通过java -jar的方式进行启动。...那么我们的程序在发布到不同环境的时候,难道每次都要修改配置文件里的内容么,这样的话肯定太麻烦了,而springBoot为我们提供了合理的解决方案。 怎么解决呢,那就是使用多套配置文件。...springBoot优先加载的肯定还是application.yml,我们只需在这个配置文件中来指定让谁生效即可。...我们就在我们之前写的FirstController中测试: package com.lsqingfeng.springboot.controller; import org.springframework.beans.factory.annotation.Value
SpringBoot中的profile的使用 简介:本文通过案例讲解SpringBoot中的profile的使用。 概述 profile是用来完成不同环境下的,配置的动态切换功能的。...配置方式 properties 这里是三种不同的properties文件,我们想要运行哪一个,可以在第一个application.properties文件中指定....profiles: pro --- spring: profiles: active: pro 运行结果 程序打包运行 合并集合 一共有 n 个数,编号是 1∼n,最开始每个数各自在一个集合中。...现在要进行 m 个操作,操作共有两种: M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; Q a b,询问编号为 a 和 b 的两个数是否在同一个集合中...接下来 m 行,每行包含一个操作指令,指令为 M a b 或 Q a b 中的一种。
一、新增三个依赖pom.xml,以及yml配置文件,以及在启动类上面加包扫描 pom.xml <?xml version="1.0" encoding="UTF...
,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是 在运行过程中,帮你自动生成的 。...SpringBoot中使用lombok 添加依赖 的注解介绍 @NonNull : 让你不在担忧并且爱上NullPointerException @CleanUp : 自动资源管理:不用再在finally中添加资源的close方法...我的工具已经安装了该插件,所有在右侧是没有任何按钮的,如果你的工具没有安装该插件, 右侧会有一个绿色的按钮,按钮的内容则是Install,点击安装后重启Idea就可以了。...这里重复了大量的 @Getter 和 @Setter 注解。 如果你只是需要在Class中仅暴露几个字段,那么使用它们非常方便,但如果您需要为所有字段生成访问器,则会变得烦人又无聊。