- 博客(256)
- 资源 (18)
- 收藏
- 关注
原创 spring源码解析(二) @Autowired自动注入过程
1.依赖注入到底有几种?两种、四种、五种?两种:手动:set(byType、byName)、构造器自动:xml中:set、构造器 autowired注解中:set、属性、构造器重点不在于到底有几种,而在于是否真的理解了依赖注入。2.@Autowired注解方式自动注入源码过程具体分析属性填充populateBean方法:只看关键部分,注入的部分 // 是否在BeanDefinition中设置了属性值 PropertyValues pvs = (mbd.hasProper
2020-11-03 16:52:53 1529
原创 springboot中怎么获取多例(prototype)
平时我们使用springboot注入的类,默认是单例的。所以需要在注入的时候声明是原型模式(prototype)@Component@Scope("prototype")public class User1 { private String name; public String getName() { return name; } public void setName(String name) { this.name =
2020-10-14 16:19:58 3013
原创 java 实现FTP上传下载功能,并解决Could not parse response code.Server Reply: SSH-2.0-OpenSSH_5.3问题
现有需求将文件从FTP服务器上进行上传下载,看网上使用了org.apache.commons.net.ftp.FTPClient类,但通过该类连接FTP会报一个Could not parse response code.Server Reply: SSH-2.0-OpenSSH_5.3这样的错误,原因是它不支持这种方式的连接(使用FTPSClient的SSL也是不行的),所以现在换新的工具,使用ChannelSftp来实现该功能。上代码:根据实际情况略作修改pom文件:<dependen
2020-10-10 14:07:37 3866
原创 SecureFX中文乱码,而SecureCRT中文显示正常
打开SecureFX软件,我的是汉化了。发现里面的文件含有中文乱码通过如下配置改了utf8编码重启后发现还是乱码,于是继续找解决方法。于是修改全局配置,步骤如下:通过这里的路径进入文件夹,然后再进入Sessions文件夹中,里面都是ini文件,找到自己使用的ip的ini文件,编辑修改内容打开以后,搜索UTF8,找到如下内容,将内容改为00000001,保存并重启SecureFX。最后结果,中文显示正常。...
2020-10-10 13:56:29 409 1
原创 synchronized锁验证(偏向、轻量级、重量级)
看synchronized之前先了解一下对象头里面的内容:一个小demo,运行一下public class MyThred { static TestDemo testDemo; public static void main(String[] args) throws Exception { testDemo= new TestDemo(); System.out.println(ClassLayout.parseIns
2020-09-28 11:38:26 160
原创 手写springboot内嵌tomcat启动
外置和内嵌tomcat区别外置的tomcat:tomcat启动加载web.xml,通过web.xml配置初始化spring容器,并加载dispatcherservlet内嵌tomcat:springboot启动,初始化spring容器加载bean,然后启动内嵌tomcat,通过servlet3.1规范的 ServletContainerInitializer加载dispatcherservlet代码示例及流程说明我会一边贴出代码,一边解释下部分代码git地址:https://gite.
2020-09-08 13:45:57 1285 6
原创 springboot自定义starter及自动配置源码分析
springboot-starter介绍SpringBoot 最强大的功能之一就是把我们常用的场景抽取成了一个个starter(场景启动器),可插拔的特性。spring-starter的官方命名规范:前缀:spring-boot-starter- 模式:spring-boot-starter-模块名自定义命名空间后缀:-spring-boot-starter 模式:模块-spring-boot-starter自定义starter demo项目结构:首先创建一个空的mave
2020-09-01 18:50:59 286
原创 手写springmvc框架,实现三个基础注解(controller、requestMapping、requestParam)
参考文章https://my.oschina.net/liughDevelop/blog/1622646。本文实现了springmvc的url映射,但没实现requestParam功能和多个参数,在原基础上优化一下。一、springmvc的基本流程 ⑴ 用户发送请求至前端控制器DispatcherServlet ⑵ DispatcherServlet收到请求调用HandlerMapping处理器映射器。 ⑶ 处理器映射器根据请求url找到具体的处理器,...
2020-08-27 17:08:50 586
原创 java 如何判断对象内的某个属性是空
朋友给我说了这个问题,第一反应是a.xx==null。朋友给我说错了,应该用反射,于是我总结了一下为什么要用反射。我认为有两点:1.你不知道这个对象是什么类型,如果是int类型,而int类型又不能用 ==null来判断。2.这个对象内的属性是私有呢,你就通过a.xx拿不到这个属性了。上代码:一个user对象public class User { private String a; private int b;}一个测试类:public class
2020-08-21 18:32:30 1482
原创 一句话说明springboot常用注解!
1.配置@SpringBootApplication springboot启动,本质上是@ComponentScan、@Configuration和@EnableAutoConfiguration三个注解的组合@SpringBootConfiguration springboot启动配置@Configuration 配置注解@EnableAutoConfiguration 自动配置@Component 组件,配置在类上@ComponentScan 组件扫描@Controller
2020-08-10 18:03:59 319
原创 mybatis一二级缓存机制详解
转自美团技术团队:https://tech.meituan.com/2018/01/19/mybatis-cache.html
2020-08-10 15:05:09 239
原创 mybatis中为什么映射一个参数不需要对应名称,而多个参数需要
先看一个例子:接口为:public List<User> getUserByIds(@Param("id") String id,@Param("status") String status);xml: <select id="getUserByIds" resultType="com.chuan.dao.User"> SELECT * FROM user WHERE id = #{id} and id !=#{status} </.
2020-08-07 14:44:31 816
原创 手写mybatis框架(一)通过动态代理简单实现查询功能
在手写mybatis简化版框架先了解一下mybatis框架的执行流程。一、Mybatis框架执行流程1.配置文件有两种,一个为主配置文件,一个为映射文件。主配置文件:配置了jdbc等环境信息。映射文件:配置了接口对应的sql语句映射。这两个配置文件会被封装到Configuration中。2.通过mybatis配置文件得到SqlSessionFactory。3.通过SqlSessionFactory得到SqlSession,一个sqlSession相当于一个request请求。
2020-08-05 17:34:18 338
原创 JDK动态代理的意义和用法
一、JDK动态代理的意义1.什么是代理?代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。2.java代理模式静态代理静态代理类:由程序员创建或者由第三方工具生成,再进行编译;在程序运行之前,代理类的.class文件已经存在了。 静
2020-07-23 18:01:25 2029
原创 在idea下jdk动态代理时反复输出的问题
先上代码:接口和实现类public interface Movie { void play();}public class NoVipMovie implements Movie { public void play(){ System.out.println("播放非vip电影"); }}InvocationHandler的实现类public class MyInvocationHandler implements Invocation.
2020-07-23 15:05:34 631
原创 基于redis实现抢红包功能(包括余额退回处理)
本文将讲述使用redis实现抢红包功能,采用发红包时将红包拆好存储,解决红包金额平衡问题(两种算法)、解决超发现象、将数据通过消息队列传递给另一个服务写入数据库。框架为:使用springboot框架实现,springboot搭建、maven配置略。一个简单的前端页面模拟并发量:两个功能:一个发红包和一个抢红包<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
2020-07-22 17:17:03 1984 4
原创 使用jedis实现抢购功能,解决超发现象
抢购功能:在极短的时间内有大量的并发请求,出现因为并发所引起的问题。实例:一个商品100件,一个用户一次购买3件,100个用户同时购买。使用redis的String类型实现:通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃第一种:String /* redis实现,String方式 */ public void redis(int num,int i){
2020-07-17 16:23:22 209
原创 java 针对抢购功能对比一下悲观锁和乐观锁
抢购功能:在极短的时间内有大量的并发请求,出现因为并发所引起的问题。实例:一个商品50件,一个用户一次购买3件,100个用户同时购买。设计:mysql数据库建表语句:CREATE TABLE `product` ( `id` int(11) NOT NULL, `product_id` int(11) DEFAULT NULL, `stock` int(11) DEFAULT NULL COMMENT '库存', `version` int(255) DEFAU
2020-07-16 14:46:49 459
原创 多模块项目访问不到jsp页面
自己为了模拟并发,需要一个jsp页面来发起请求,然后在springboot多模块项目中做实验,发现jsp页面怎么都访问不了。通过日志查看发现他找不到webapp下的jsp页面,但我的jsp页面明明在那。我开始去翻自己写过的前后端未分离的项目,发现配置都一样怎么就访问不了呢,后面想了想会不会是多模块引起的,通过网上查阅发现,确实是多模块引起的,但百度一搜,十几个链接全是抄的一篇,这我能说什么呢,最终自己还是找到了问题并解决。使用工具 idea我启动项目时没有配置工作目录,这个是作为相对路径来寻址。
2020-07-15 16:50:19 444 1
原创 Springboot中配置activeMQ持久化
一、activeMQ数据库持久化配置ActiveMQ持久化的三种方式,我们采用数据库的方式来进行持久化。(1) Memory 消息存储-基于内存的消息存储。(2) 基于日志消息存储方式,KahaDB是ActiveMQ的默认日志存储方式,它提供了容量的提升和恢复能力。(3) 基于JDBC的消息存储方式-数据存储于数据库(例如:MySQL)中。首先我们先来配置activeMQ在conf文件夹里的activeMQ.xml中增加一个jdbc的bean<bean id="active
2020-06-29 17:58:34 1820
原创 随笔 redis由于aof错误无法启动
闲来无事将一个aof文件复制到自己的redis服务器上,修改配置后,重启redis发现启动失败。想必是aof的原因,就使用redis自带的检查工具进行清理了一下。redis-check-aof --fix appendonly.aof清理完毕,启动成功...
2020-06-17 11:58:16 640
原创 mysql行转列 问题 SUM(IF(条件,列值,0))
mysql经典问题,将行转为列。原表sum(if(条件,列值,0))语法用例:select name,sum(if(subject="语文",score,0)) as “语文” from grade GROUP BY nameif中第一个参数为条件,符合条件的内容才会将第二个参数相加,不符合的内容将第三个参数相加。第二个参数为要相加的参数,可以用常量,也可以用字段值。第三个参数为条件为假时相加的值,通常设为0.为了将行转为列(这种操作一般用于统计),可使用如下语句:se
2020-06-16 16:56:23 1324
原创 随笔 springboot @Async注解
在springboot中使用异步线程,需使用@Async注解。在启动类上需增加@EnableAsync(proxyTargetClass = true),proxyTargetClass为选择何种代理,@SpringBootApplication@EnableAsync(proxyTargetClass = true)public class ChuanApplication { public static void main(String[] args) { Spr
2020-06-03 18:34:35 1508
原创 springboot使用注解实现redis缓存
在springboot中两种方式使用缓存,一种是直接通过 RedisTemplate 来使用,另一种是使用 Spring Cache 集成 Redis(也就是注解的方式)。RedisTemplate 方式不作说明,详细说明实现一下注解方式。核心三个注解: @Cachable @CachePut @CacheEvict 1.@Cachable根据方法的请求参数对其结果进行缓存: Key:缓存的 Key,可以为空,如果指定要按照 SPEL 表达式编写,如果不指定,
2020-06-02 18:41:09 1085
原创 Docker入门(构建springboot和mysql容器)
CentOS 安装 Docker安装 Docker1.下载安装docker $ sudo yum install docker2.运行docker $ sudo systemctl start docker3.检查docker是否安装成功 $ sudo docker run hello-world4.安装ubuntu镜像 $ sudo docker pull ubuntu5.运行ubuntu镜像 $ sudo docker run ubuntu:15.10Docker常用命令
2020-05-29 18:22:39 318
原创 随笔 全局异常处理spring @ExceptionHandler
为了避免每次都try..catry,采用全局异常处理请求: @PostMapping("/login") public String login(String password,String username) throws Exception{ int i=1/0; }全局异常处理类:@RestControllerAdvicepublic class MyException { @ExceptionHandler(Excepti
2020-05-27 15:48:27 232
原创 随笔 自定义注解简单实现
自定义注解:@Target(FIELD)@Retention(RUNTIME)@Documentedpublic @interface Ano { public String name() default "ycx"; public String value();}@Documented // 代表这个注解,可以被javadoc 处理的(加不加都行)@Retention(RetentionPolicy.RUNTIME)// RetentionPolicy 生命周期.
2020-05-27 13:52:24 148
原创 springboot集成redis哨兵模式
本文侧重于springboot集成,redis哨兵模式的搭建请参考其他文章。前置条件一主二从redis和三个哨兵,springboot环境。连接测试先写一个小demo来测试一个哨兵模式是否能够访问。public class test1 { public static void main(String[] args) throws Exception { test1.testSentinel(); } public static void tes
2020-05-26 17:49:16 1189 2
原创 redis哨兵模式
1.Sentinel(哨兵)是Redis 的高可用性解决方案。通过一个或多个Sentinel 实例组成的Sentinel 系统可以监视多个主服务器和下属的所有从服务器,当主服务器进入下线状态时,自动将主服务器下的从服务器升级为新的主服务器。2.sentinel哨兵的作用(1)Master 状态监测,如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave ;(2)Master-Slave切换后,master_redi
2020-05-25 16:16:45 216
原创 redis主从复制
准备工作在windows上安装服务,为了在一台主机上模拟主从复制、集群等环境redis-server.exe --service-install redis.windows.conf --service-name redis6379 --loglevel verbose 安装服务redis-server.exe --service-start --service-name redis6379 启动服务redis-server.exe --service-stop --service-name
2020-05-25 15:46:32 100
原创 mysql limit分页(偏移量)过大时优化问题
先说一下limit分页语法select * from user_address limit 100000,10limit后跟两个参数,第一个参数为从第几个数据开始,第二个参数为取多少个数据。第一个参数也叫偏移量,初始值是0如果数据量很小,这么写分页当然没问题,但是当数据量大起来的时候,查询速度就会慢很多。如:select * from user_address limit 100,10 查询用时0.011Sselect * from user_address limit 100000
2020-05-25 15:15:19 3396
原创 shiro框架入门实践——加入JWT做一个登录验证
本博文代码:https://download.csdn.net/download/qq_39404258/12439869基本概念从其他博文中看,此处不讲。该项目使用了springboot、mybaits-plus、jwt、shiro、redis。mybaits-plus基本没用,只做了一次数据库查询,redis暂时不使用,登录验证成功后再追加redis操作。先说一下大致思路:登录操作:访问登录接口-》通过数据库判断是否存在-》存在后,进行shiro登录-》将登录信息转化为jwt的token
2020-05-20 14:54:19 435
原创 JWT入门实践 ——抛开shiro框架做一个登录认证
JTW官网:https://jwt.io/introduction/一、JWT基本介绍1、什么是JWTJSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,作为 JSON 对象在各方之间安全的传递信息。这个信息可以通过数字签名进行验证并信任。JWTs 可以使用密钥(结合 HMAC 算法)或者 使用 RSA 、 ECDSA 加密的公钥私钥对进行签名。2、什么时候使用 JWT授权:这是 JWT 最普遍的使用场景。当用户登录之后,每次请求中.
2020-05-18 15:11:56 677
原创 swagger搭建使用
swagger作为一个接口工具,方便前后端分离开发,搭建简单。pom文件,注意的是版本号,我框架用的是springboot,里面版本不兼容,需要更换版本号。 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.
2020-05-15 14:53:54 341
原创 springboot @Valid和BindingResult校验参数
@Valid和BindingResult是要一起使用的,成对存在进行参数校验,一个binding对应一个@Valid。常用校验注解@Null //被注释的元素必须为null@NotNull //被注释的元素不能为null@AssertTrue //被注释的元素必须为true@AssertFalse //被注释的元素必须为false@Min(value) //被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value) //被注释的元素必须是一个数字,其值必
2020-05-14 17:18:21 996
原创 随笔 mysql 定时任务
mysql定时任务设置默认情况下是关的,需要开启。临时开启为(重启mysql就没了)SET GLOBAL event_scheduler = 1;linux永久开启:vi /etc/my.cnf在[mysqld]下添加一行event_scheduler=ON语法:创建定时任务:create EVENT 事件名on SCHEDULE 频率 时间 时间单位DO sql语句例子:create EVENT user_inserton SCHEDULE EVERY
2020-05-14 16:01:56 149
原创 索引真的很重要 !!
一、索引是什么索引用来快速地寻找那些具有特定值的记录,所有的MySQL索引都以B-树的形式保存。如果没有索引,执行查询的时候MySQL必须从第一个记录开始扫描整个表中的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录既可迅速得到目标记录所有在位置。如果表有1000个记录,通过索引查找记录至少比顺序扫描记录快100倍。我用了一张20W数据量的表,自己左连接自己(为了增加数据量)。使用索引,查询全部用了6S
2020-05-12 11:30:56 375
原创 随笔 mybaits 提取公用的sql内容
1.将公用的内容提取出来,使用sql标签提取,然后使用include引用 <resultMap type="mptest.mybatistest.entity.GoodVo" id="userMap" > <result column="id" property="id" /> <result column="name" property="name" /> <collection property="order
2020-05-09 10:41:38 880
原创 随笔 mybatis collection简单使用
返回实体类中有一个集合,该集合需要映射的时候进行collection处理public class GoodVo { public int id; public String name; public int getId() { return id; } public void setId(int id) { this...
2020-05-08 16:11:41 217
原创 java8新特性快速入门(介绍、示例)
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。新特性Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式− Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。 方法引用− 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用...
2020-05-06 17:02:06 260
activemq-5.15+mysqljdbc配置.zip
2020-06-29
shiro jwt登录认证
2020-05-20
springcloud.zip
2019-12-10
微信小程序电商平台(前端模板)
2019-04-24
spring框架的jar
2018-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人