09 2020 档案
摘要:一.前言 最近练习一个仿电商网站的一个分布式项目,其中图片服务器使用到了fastDFS+nginx,装的过程十分苦逼,建议大家自己装一遍吧,你直接把别人虚拟机或docker的fastDFS容器拷过来,你不知道哪些配置需要改的,所以老实搭建一遍吧,过程比较长,请您耐心跟着做 二.下载libfastco
阅读全文
摘要:一般你的项目是从网上copy下来的,导入到你的IDE中会报错或者启动各种错误是非常正常的,下面常见的问题 一.数据库问题 最好你网上找到的maven项目能顺便提供sql文件是最好不过了,不然你数据的获取很麻烦,对于一些小白来讲很致命。有了sql文件,接下来就是连接数据库的问题,我建议项目中用到的数据
阅读全文
摘要:一.ip地址相关 1.查看自己的ip地址: ifconfig -a 二.进程相关 PS命令使用:ps命令用于查看当前正在运行的进程,最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,再对特定的进程进行操作,其中grep起到搜索作用。 PS命令语法: ps [选项] -e显
阅读全文
摘要:为什么同时重写hashcode和equals? 我们同时重写equals和hashcode的原因是因为要重写equals方法,原生的equals方法是判断两个对象内存地址是否相同,现在我要判断两个对象内容是否相同,所以我才要重写equals方法 那重写equals方法跟hashcode有啥关系呢?关
阅读全文
摘要:答案是不会的,我已经试过了,代码如下: public class TestNotify { public static void main(String[] args) { TestNotify testNofify = new TestNotify(); testNofify.testNotify
阅读全文
摘要:请大家参考下面这位老兄的介绍,说的很详细很好,看懂需要一定的基础,所以如果你还处在学习Java基础或web的小白阶段,可不必太在意这个这个关键字,等你变得更加强大再来学习也不迟的 地址:https://blog.csdn.net/qq_24047659/article/details/8803171
阅读全文
摘要:我对这个的理解:人家是设计成这样的。你会发现在wait前是要先拿到锁的,然后wait释放锁,让其他线程抢夺。在notify或notifyAlll前,你要先拿到锁,然后唤醒线程,当同步代码结束后释放锁,这时候其他线程便可以抢了。 这整个过程都离不开锁,如果不在同步上下文中使用wait,notify,n
阅读全文
摘要:这个问题我们先假设在if的情况下,以生产者和消费者来说,当容器满了,生产线程在满足if的条件下执行wait了,后面有人唤醒它了,它也顺利拿到锁了,这时候你想一下,它从哪开始执行?是不是上次wait的代码下一行开始执行,它就跳过if的判断去生产了,要是这时候容器满了呢?那容器就肯定溢出了,这肯定不是我
阅读全文
摘要:notify导致的问题应该不叫死锁,死锁起码得有两把锁把,很多人举的例子都是一把锁的,而且代码好乱。 我举个例子说一下所谓的notify可能会导致的”死锁“: 》现在有10个人负责做蛋糕,而只有2个人负责吃蛋糕;其中4个做蛋糕的人由于之前装蛋糕的容器满了,一直在等待区里没被通知过,后来2个吃蛋糕的人
阅读全文
摘要:Runnable接口有个缺点,它的run方法没有返回值并且不能抛异常,如果需要线程执行完返回一个结果以及希望能抛出异常,那么还有一个接口刚好能弥补这两个缺点:Callable,它跟Runnable都是任务接口,使用上基本相同
阅读全文
摘要:在java中创建线程的方式有两种: 1.继承Thread类;继承Thread的类就是一个线程类,需要重新run方法,run方法里的代码就是本线程要执行的代码 2.实现Runnable接口,并重新run方法,并将实现类作为参数交给一个Thread类区执行;实现Runnable接口的类相当是一个任务类,
阅读全文
摘要:1. sleep()方法:是属于Thread类中的。 wait()方法:是属于Object类中的;两者都会造成线程的阻塞(让出cpu使用权) 2. sleep()方法是在指定的时间让当前线程暂停执行,让出cpu该其他线程,但是他的状态依然保持(就是执行到了哪行代码就在哪行停留着,等到超时或者调用in
阅读全文
摘要:话不多说,看以下两部分代码 public class ThreadTest { public static void main(String[] args) { //创建并开启线程 new MyThread().start(); //循环遍历 for(int i=0;i<100;i++) { Sys
阅读全文
摘要:一般序列化中的序列号冲突问题大致是这样形成的: 1.假设有一个类User,实现了序列化接口 2.这个类编译后形成一个字节码文件,由于实现了序列化接口,在编译后的class文件会带有一个序列 ID,之后加载内存并创建对象等 3.然后我们通过对象输出流把对象写到一个文件里,这时候序列号 ID也会被写入到
阅读全文
摘要:一般自动配置类都是放在xxx-starter-autoconfigurer依赖下。 1.创建一个空项目,项目有两个模块:starter模块的maven项目(引入configuer),configuer模块的springboot项目(由于configuer模块是被依赖来使用的,因此不需要这个主程序类,
阅读全文
摘要:》书写两个监听器的实现类 》书写两个runner的实现类,并注册到容器中 》配置两个监听器
阅读全文
摘要:
阅读全文
摘要:》底层jpa使用的是hibernate,表是自动生成的,无需手动创建 4.测试UserRepository
阅读全文
摘要:
阅读全文
摘要:使用mybatis注解版的好处就是只需要写mapper接口,不需要写配置文件,原本的sql语句通过注解的方式加入 PS:useGenerateedKeys代表是否要查询数据库中刚插入的数据的主键,keyProperty代表查询到的主键映射到实体类的哪个属性上
阅读全文
摘要:
阅读全文
摘要:1.引入druid依赖 2.配置文件指定数据源的类型 》只要导入了我们自己的数据源依赖,在配置文件spring.datasource.type指定自己的数据源,springboot就可以通过反射的机制帮我创建数据源对象,但是有一点不好的是,我们不能在配置文件中设置自己数据源的参数信息,所以只能自己手
阅读全文
摘要:注意:如果sql文件的命名以及路径都符合springboot的规范,每次springboot项目启动时就会执行sql文件,也就是如果数据库的表会被覆盖掉,因此最好就不要把sql文件放到springboot执行。
阅读全文
摘要:注意:删除容器并不会对原有的镜像文件有任何的影响,而且一个镜像文件是可以生成多个不同的容器,且docker内部的端口是可以重复的,但主机端口不可重复
阅读全文
摘要:纠正:docker会运行镜像文件,正在运行的这个镜像文件被视为一个容器;所以docker像是一个容器的生产者 补充:docker也是一个虚拟化的技术。此前,我们想构建一个跟当前操作系统一样的硬件环境,就通过虚拟机软件根据操作系统的镜像文件构建各种系统,比如ContOS等等;那docker的原理也是如
阅读全文
摘要:1.服务器启动时要先创建每一个jar包里面的ServletContainerIntialize实例,提前说下这个ServletContainerIntializer(接口)的创建是通过反射的,因此我们得获取它的实现类的全类名 2.jar包中的/META-INF/services文件夹下有一个java
阅读全文
摘要:》现在我们希望使用外部的servlet容器来运行我们的项目,而且是war包,不能是Jar包,有两种方式:把war包直接放到相应的servlet容器中或者将servlet容器整合到IDE中,再把项目部署到容器里。 》我们创建一个springboot项目时要指定成war包,然后生成的一个目录结构是没用w
阅读全文
摘要:大致的流程是:springboot启动-->创建IOC容器并初始化-->获取容器工厂对象-->后置处理器进行容器属性的初始化工作-->servlet容器初始化完毕并启动。
阅读全文
摘要:Embedded是嵌入式的意思 》以嵌入式的tomcat容器工厂为例: xxxPostProcessor是后置处理器,后置处理器的作用是在对象创建完毕,但没属性赋值时执行一些处理工作 因此这个后置处理器的作用就是给所有的嵌入式servlet容器的定制器进行属性赋值 我们配置文件来配置servlet容
阅读全文
摘要:》在webmvc的start的配置文件中,切换servlet容器:
阅读全文
摘要:以前我们把一个web工程打包成war包,再部署到tomcat的servlet容器才能运行。现在springboot的jar(其实也可以看作是war)可以直接运行,原因就在于它有内置的servlet容器
阅读全文
摘要:关于DO,DTO和VO在项目 DO:对应数据库表结构 VO:一般用于前端展示用 DTO:用于数据传递(接口入参和接口返回值都可以) 以SSM框架为例: Controller层: public List<UserVO> getUsers(UserDTO userDto); Service层: List
阅读全文
摘要:PS:如果把模板页面放到不是模板引擎能解析的位置(默认templates下是thymeleaf能解析的路径),那么thymeleaf相关的标签和属性将不起作用
阅读全文
摘要:》遍历员工数据到页面
阅读全文
摘要:th:fragment的值是任意的 PS:模板名是html页面的文件名,不是标签名
阅读全文
摘要:》在spintboot项目运行期间,若是修改了html页面,页面效果并不会生效,为保证生效,需要如下两步: 使用/**拦截,在springboot1.x.x拦截静态资源后会映射到默认的静态资源存放路径中,比如/static中。而到了springboot2.x.x就没有这个机制了,统一拦截,也不会去静
阅读全文
摘要:想要从页面去到国际化配置文件的值,可以通过thymeleaf的表达式#{}来实现: 》下面实现自己的localeResolver PS:springboot自动配置,判断bean的方式是根据bean的id,所以我们向容器添加的LocalResolver的beanName必须是localeResolv
阅读全文
摘要:像js和css等可以放在resouces/static目录下,而html最好放在resouces/template,只要引入了thymeleaf,在返回逻辑视图时,会有去扫描resouces/template下查看是否有需要的html文件(不需要加.html后缀) 》在html页面想要引用其他的静态
阅读全文
摘要:首先说一下核心区别: NIO是以块的方式处理数据,但是IO是以最基础的字节流的形式去写入和读出的。所以在效率上的话,肯定是NIO效率比IO效率会高出很多。 NIO不在是和IO一样用OutputStream和InputStream 输入流的形式来进行处理数据的,但是又是基于这种流的形式,而是采用了通道
阅读全文
摘要:所以,我们继承WebMvcConfigurerAdapter就是属于webMvcConfigurer类型的,会被组合起来遍历其中的某些方法。
阅读全文
摘要:springbooot的打包方式是jar包,按以往的开发观念好像Jar中是没有存放静态资源这回事的,不过恰巧的是sprintboot确实能引入静态资源,没办法,凡事都有例外把 以前我们的静态资源是再main下的webapp,可springboot项目并没有webapp这个文件夹,还好的是spring
阅读全文
摘要:》这个就很像之前prefix和suffix属性,会为我们返回的字符串进行拼串 之前我们前缀实在WEB-INFO下面,后缀是jsp,现在只是换了个模板引擎而已,而且人家前后缀都给你配好了;如果你html没有设计thymeleaf的表达式和标签等,其实返回的就是一个没有渲染的静态页面。 一.ThymeL
阅读全文
摘要:以前使用的模板引擎是jsp,但jsp并不能在springboot中使用,因为它是个Jar,以及内嵌的tomcat;所以根本不支持jsp这种模板引擎 但是springboot推荐使用另一种模板引擎:thymeleaf 根据这种切换版本的方式,也可以切换其他jar的默认版本。
阅读全文
摘要:在sprinboot切换日志框架其实是不提倡的,使用默认的slf4j+logback就可以了,但非要换也没办法是把哈哈 》从logback切换到log4j,使用log4j作为实现 1.参照log4j和slf4j的关系图 2.剔除相关包: 3.加入适配log4j的jar包,该包直接依赖了log4j的j
阅读全文
摘要:开发环境(dev):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告。 测试环境(test):一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。 生产环境(prod):是值正式提供对外服务的,一般会关掉错误报告
阅读全文
摘要:在配置文件中,可以配置日志的输出格式,某些类的日志输出级别,默认的root级别 》若想要自己定义日志配置文件: 在类路径下加入日志配置文件,之后springboot会扫描这个路径;如果真的使用我们自己的日志配置文件,就不再使用springboot提供的了
阅读全文
摘要:图表从水平方向看,比如第一行;在没有指定logging.file和logging.path,日志只会输出到控制台;如果只指定了logging.file且只有文件名,日志文件会生成在当前项目下。
阅读全文
摘要:springboot已经把一些替换包导入了,我们只需要剔除一些其他框架的日志包即可。
阅读全文
摘要:替换包的类很多跟原先的类是一样的,只不过方法的内部调用变成了调用slf4j的接口,而slf4j再去调logback
阅读全文
摘要:以前没有日志框架时,直接在项目代码里面添加各种System.out.println()对项目运行期的各种状态信息(比如警告,错误信息等)进行一定的说明和描述 但这种硬编码的方式并不好,所以在想能不能把这些状态信息放到一个文件里面呢?这时候日志文件就出现了,伴随着日志框架也涌现出来
阅读全文
摘要:》当conditional派生类的注解满足条件返回true,代表它所修饰的类或者方法等生效 》切记,并不是所有的自动配置类都会生效,因为很多配置类上都有conditional进行判断 》这样一来,出现一个问题,我们如何知道哪些配置类是被加载到容器,哪些并没有加载?
阅读全文
摘要:平时我们在properties或yml配置文件能写已有的配置(比如server.port)是有依据的,能配置的属性来源自xxxProperties文件中;下面开始讲解整个过程: 1.我们书写一个主配置类,加了springbootApplication注解,有了该注解,我们就可以启动springboo
阅读全文
摘要:下面的两个文档块指定了profile,默认是不加载的,需要第一个文档快中来激活下面的profile,才能生效
阅读全文
摘要:由于我的IDE是eclipse,并没有使用IDEA,所以我百度 "依赖spring-boot-configuration-processor后还是没有提示”百分之99都是idea的解决方案 本人也比较垃圾,这问题花费了我两天,还把eclipse给卸载然后重新安装了(蠢哭了自己),下面说一下如何解决:
阅读全文
摘要:相信大家和我一样,在网上查看相关sts安装的教程,且博主给的sts的下载路径还是不对的 由于我eclipse版本是4.16,便下载了spring-tool-suite-3.9.13.RELEASE-e4.16.0-win32-x86_64.zip,实际上文件都下载错了,正确的应该是以updayesi
阅读全文
摘要:注意:这个@propetySouce必须和@ConfigurationProperties一起使用,只不过@propetySouce会覆盖和@ConfigurationProperties相同的属性值 如果直接写spring的配置文件,sprinboot是无法识别的,必须使用@ImportResou
阅读全文
摘要:
阅读全文
摘要:我们在配置文件设置好类的属性值,但这样还不够,我们需要进行一一的映射才行,在类上加上@ConfigurationProperties注解并设置prefix的值就相当于把配置中的属性值映射到类中属性并生成一个对象实例到spring容器中.
阅读全文
摘要:application.properties和application.yml都是springboot主配置文件,其作用就是让我们添加自己的配置或者是修改原有我们觉得不满意的配置。
阅读全文
摘要:AutoConfigurationPackages这个注解类下有一个静态类Registrar,这个类某个方法可以扫描主配置类所在包下的所有他能识别的注解,比如@controller 自动配置类的作用就是给容器中导入这个场景所需要的组件,并配置好这些组件。
阅读全文
摘要:
阅读全文
摘要:
阅读全文
摘要:》使用springboot可以快速得构建一个微服务应用
阅读全文
摘要:在以前我们的项目是要打包成jar或者web包然后部署到tomcat服务器运行,因为tomcat有web容器;现在springboot有内置的web容器了,就可以拿来直接运行。
阅读全文