- 博客(75)
- 收藏
- 关注
原创 spring.profiles.active的使用
以前在工作中总是不明白spring是如何区分不同环境的,今天写了一个简单的小demo,明白了。记录一下,以备自己以后独立开发项目使用。首先应该在pom.xml中添加以下配置: <profiles> <profile> <!-- 生产环境 --> <id>prod</id> <properties> <pr
2021-09-16 16:16:47
30207
5
原创 SpringBoot定时任务基于@Scheduled注解实现
今天整理的demo适合简单的业务场景使用,实现起来非常简单。1,首先创建一个SpringBoot工程@SpringBootApplication@EnableScheduling //开启定时任务public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}2,在配.
2021-07-21 16:02:17
289
原创 EasyExcel实现数据的导出
简单的测试demo,针对场景:只对一个sheet的导出操作1,首先引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.4</version> </dependency>2,假设只.
2021-07-21 15:47:00
3688
原创 @ConfigurationProperties与@Value的区别
最近面试被问到如何获取properties里面的值?我说用@Value,因为我只用过@Value,面试结束以后面试官说也可以使用@ConfigurationProperties,回去学习一下。。。今天来整理一下,以备以后开发使用。推荐地址:https://blog.youkuaiyun.com/qq_43513205/article/details/86564166@ConfigurationProperties可以理解为编写一个JavaBean来和配置文件进行映射;如果只想在某个业务逻辑中获取一下配置文件中的
2021-06-06 18:31:43
215
原创 @Autowired 与@Resource的区别
面试问这两个注解的区别是什么?不要仅仅回答下面这句话,一看就是背的,要把下面的demo研究明白,会让面试官为你这次面试加分的。@Autowired默认按类型装配,而@Resource默认按照名称进行装配demo01:1)TestAServiceImpl ,TestBServiceImpl 都实现了TestService 接口public interface TestService { void test();}@Servicepublic class TestAServiceIm
2021-06-02 21:34:23
139
原创 MyBatis_plus实现简单查询与条件查询
1)通过id进行批量查询测试demo: @Test public void test04() { List<User> userList = userMapper.selectBatchIds(Arrays.asList("1388048014324580354", "1392340666326999041")); userList.forEach(System.out::println); }sql执行结果:==> Prepar
2021-05-26 21:45:42
499
原创 MyBatis_plus的物理删除与逻辑删除
1)根据id进行删除int result = userMapper.deleteById("1397387511965212673");sql执行:DELETE FROM user WHERE id=?2)根据多个id批量删除 int result = userMapper.deleteBatchIds(Arrays.asList("1397387511965212673", "1397387379655892993"));sql执行: DELETE FROM user WHERE id
2021-05-26 13:46:40
1722
原创 MybatisPlus乐观锁的实现
在并发情况下,多个线程同时对于同一条数据进行操作,可能会对出现数据丢失更新的问题,此类问题可以使用乐观锁来实现。(1)在表中的字段与类中的属性字段要对应:private int version;(2)在属性加上相关注解 @Version private int version;(3)增加配置类@Configurationpublic class VersionConfig { /** * 乐观锁插件 */ @Bean public
2021-04-30 16:38:41
218
1
原创 mybatisPlus实现创建时间、更新时间自动添加
对于添加数据和修改记录时都要对添加时间和修改时间也要同时做更新,在我们使用mybatis时,需要手动记录当前时间为创建时间,当我们使用mybatisPlus时,就不想mybatis那样麻烦的手动去记录时间,只需要添加一个注解就可以实现自动添加功能。(1)在表中的字段与类中的属性字段要对应: private Date createTime; private Date updateTime;(2)在属性加上相关注解 @TableField(fill = FieldFill.INS
2021-04-30 14:31:08
17777
5
原创 mybatis-plus是如何知道哪个是主键字段?
情况一:如果数据库中主键名称叫id,实体类中的属性名也叫id,mp默认认为字段名为id的是主键。情况二:如果数据库中主键名称叫uid,,实体类中的属性名叫id,需要使用注解@TableId。public class User { @TableId(value="uid") private Long id; private String name; private Integer age; private String email;}...
2021-04-26 16:27:50
2203
5
原创 java.sql.SQLException: The server time zone value ‘�й���ʱ��‘ is unrecognized or represents more
springboot项目启动报错信息如下: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 configuration property) to use a more spe
2021-04-26 15:25:42
134
原创 List中属性转换成以指定字符分隔的字段串
在工作中会遇到下面一个场景:从数据库中根据某些条件查询会返回很多条数据,这些数据返回到后台我们用List集合接收,由于List的泛型是我们后台自定义实体类,我们只想要获取这些数据中实体类的某一个字段的值并将其转换成以逗号分隔的字符串。说了这么多都是业务场景,技术上讲其实说白了就是将list中对象的属性以逗号分隔转为字符串。代码如下:方法一:List<自定义类>@Data@AllArgsConstructorclass Student { public String name;
2021-04-09 16:01:06
984
原创 线程池中submit与execute的区别
ExecutorService executorService = Executors.newCachedThreadPool(); //调用execute() executorService.execute(()-> System.out.println("执行execute方法!") ); //调用submit() executorService.submit(() -> ...
2020-06-07 16:15:27
357
原创 volatile不保证原子性验证
原子性:一个线程在操作时,中间不可能有其他线程来抢占资源,此操作要么成功,要么失败。验证不保证原子性:public class AtomicTest { volatile int num; void add() { num++; } public static void main(String[] args) { AtomicTest atomicTest = new AtomicTest(); for (int i
2020-06-05 16:26:20
217
原创 JVM面试题---进阶篇(一)
一,垃圾回收,如何判断哪些对象当作垃圾需要被回收?在内存中,要进行垃圾回收,首先我们先明确什么是垃圾?内存中不再使用的内存空间我们都称为垃圾。如何判断该对象是否需要垃圾回收?可达性分析算法也称根搜索路径算法:从GC Root对象为起点,向下开始搜索,如果一个对象到GC Root没有任何引用链相连时,则说明此对象不可用,也即给定一个集合的引用作为根出发,通过引用关系遍历对象,能被遍历的对象则判定为存活,没有遍历到的则判定为死亡。上面我们提到GC root,哪些对象可以作为GC Root对象?《深入理
2020-05-20 18:59:50
594
原创 mysql事务的隔离级别与传播行为
事务的四个特性:原子性:一个事务中的所有操作要不都成功,要不都失败,如果其中有一个操作失败了,则会回滚到事务操作前的状态。一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则。隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。事务的隔离级别:读未提交:一个事物读到了另外一个事务没有提交事务
2020-05-20 10:57:15
407
原创 InnoDB索引和MyISAM索引的区别
myisam:当表采用myisam做存储引擎, 底层数据表由.frm 描述表结构、. MYD保存表数据、 .MYI存储表索引 。底层是B+树作为索引结构,叶子节点data存放的是数据记录指针的地址,这种索引结构为非聚簇索引。下图为myisam底层索引结构:innodb:与myisam的区别是,数据文件就是索引文件,叶子节点data存放的是数据的整条记录。这种索引结构为聚簇索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果我们定义了主
2020-05-19 17:57:12
822
原创 redis介绍
1,了解redisredis是一种非关系型的数据库,是一种key-value键值对类型的数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作。Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。2,redis与memcached的区别1)Memecache把数据全部存在内存之中,断
2020-05-19 16:47:40
157
原创 volatile保证可见性验证
可见性:在多线程的环境下,一个线程对共享变量的修改,其他线程可以看到变量修改后的值。验证可见性demo:public class TestVolatile extends Thread { volatile boolean flag; @Override public void run() { try { Thread.sleep(3000L); } catch (InterruptedException e) {
2020-05-19 11:32:14
253
原创 Virtualbox+Vagrant安装Centos7
步骤一:确定电脑的cpu开启CPU虚拟化步骤二:下载Virturalbox并完成安装下载地址:https://www.virtualbox.org/wiki/Downloads步骤三:下载Vagrant并完成安装,并且电脑要重启下载地址:https://www.vagrantup.com下载会超级慢,而且还总失败,建议使用迅雷离线下载步骤四:在cmd中运行:vagrant出现以下信息,代表安装成功步骤五:下载virtualbox.box镜像,并将该镜像放到本地文件夹下下载地址:ht
2020-05-17 00:27:38
3975
原创 外观模式
一,什么是外观模式?是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性,类似于系统的网关。二:外观模式中的角色?外观(Facade)角色:为多个子系统对外提供一个共同的接口。子系统(Sub System)角色:实现系统的部分功能,客户可...
2020-04-23 17:34:03
101
原创 观察者模式
一:什么是观察者模式?指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。二:观察者模式中主要的角色1)抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。2)具体主题(Con...
2020-04-23 16:02:53
108
原创 Mysql性能优化
数据库性能优化: 1. 为查询缓存优化查询大多数的 MySql 服务器都开启了查询缓存。这是提高性最有效的方法之 一,当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了**。 2. explain关键字优化select 查询** 使用 explain 关键字可以让你知道MySql是如何处理你的 SQL 语句的。这可...
2020-04-22 17:11:42
114
原创 idea中去掉@AutoWired注入bean报错
有时开发项目时,会遇到注入的bean报红,但是并不影响运行在file–setting中:将error该为warning
2020-04-20 11:10:33
351
原创 通过日志查看MybatisPlus底层的执行具体结果
在配置文件中加入:#mybatis日志mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl当执行以下sql语句时:打印出来的日志信息:
2020-04-18 19:45:37
748
原创 org.springframework.beans.factory.NoSuchBeanDefinitionException
原因:mapper没有被容器扫描到解决方法:在启动类上加mapper的扫描@MapperScan("mapper的包名“)
2020-04-18 19:15:40
149
原创 Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules
启动项目时,会报这样的错误,产生的原因是就是我依赖了你,同时你也依赖了我,这时候就回产生循环依赖问题不允许module之间进行循环依赖如下图:就会报错:解决:在pom.xml文件中删除其中一个依赖,然后重新启动,就可以了...
2020-04-16 16:55:06
1678
原创 [笔试题]类的加载顺序(二)
再看这篇文章之前,先看一下基础篇:类的加载顺序(一)https://blog.youkuaiyun.com/weixin_44774355/article/details/105068693类的加载顺序:由父及子,静态先行测试demo:测试01:测试02:测试03:执行结果:从执行结果我们总结出:类加载时候,先加载父类,再加载子类,静态代码块>普通代码块>构造器,并且静态代码块仅会...
2020-03-24 12:45:57
253
原创 [笔试题]类的加载顺序(一)
类的加载顺序:静态代码块>普通代码块>构造器下面我们demo说明:测试01:测试02:通过两次测试我们能看出:类的加载顺序:静态代码块>普通代码块>构造器,当我们多次new该对象时,静态代码块只会执行一次,普通代码块和构造器执行次数和new对象的次数相同。...
2020-03-24 12:21:02
206
原创 策略模式
策略模式是将对象的行为分离出来,抽象成为一个接口。模拟一个场景:假设一共有三种方式供游客选择出行,分别为火车、高铁、飞机,不同的游客可以选择不同的出行方式。抽象策略类(TravelStrategy):策略的抽象,对某一种方式进行抽象具体策略类操作具体策略的客户端测试类:不同的用户可以选择不同的出行方式选择策略模式避免了使用if-else的判断,降低了代码间的耦合性。...
2020-03-16 13:43:44
77
原创 适配器模式
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作适配器模式分为:类适配器、对象适配器、接口适配器类适配器模式的代码如下:Target:给手机充电目标类Adaptee:被适配者,交流电压220vAdapter:适配器,将220v的交流电压转为5v测试类:类图如下:对象适配器模式的代码如下:Target:给手机充电目标类Adaptee:被适配者,交...
2020-03-15 19:46:57
131
原创 建造者模式在 StringBuilder 源码中的应用
StringBuilder源码发现:StringBuilder继承了 AbstractStringBuilderAbstractStringBuilder 实现了一个 Appendable 接口Appendable 接口定义了多个 append 方法(抽象方法),即 Appendable 为抽象建造者,定义了抽象方法AbstractStringBuilder 实现了 Appendabl...
2020-03-15 14:54:24
164
原创 建造者模式
Product类:要建造的具体产品(假设该产品由三个部分组成)Builder:抽象建造者ConcreteBuilder:具体建造者抽象建造者与具体建造者【抽象建造者类中定义了产品的创建方法和返回方法;具体建造者类实现了抽象建造者类的抽象接口,构建和装配各个部件】Director指挥者:可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象测试类:执行结果:通过代码我们能...
2020-03-15 13:59:59
129
原创 Java中的深浅拷贝问题
浅拷贝:1,对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。2,对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对...
2020-03-15 11:29:56
278
原创 原型模式在JDK源码中的应用
spring 提供了5种scope分别是singleton, prototype, request, session,global session。如果一个bean被声明为单例的时候,在处理多次请求的时候在spring 容器里只实例化出一个bean,后续的请求都公用这个对象,这个对象会保存在一个map里面。当有请求来的时候会先从缓存(map)里查看有没有,有的话直接使用这个对象,没有的话才实例化...
2020-03-14 14:23:14
675
原创 原型模式
原型模式(Prototype Pattern)用于创建重复的对象,同时又能保证性能,即利用已有的一个原型对象,快速地生成和原型对象一样的实例。解决方法:实现克隆操作,实现Cloneable接口,重写clone()方法。例如,有一只多利羊,需要创建两个同样的实例:注意: 省去带参构造器,set和get方法及toString()方法测试结果:...
2020-03-14 13:41:40
89
原创 工厂模式在JDK源码中的应用
当我们创建对象实例的时候,不要直接new对象,而是把这个new对象的动作放在一个工厂的方法中。工厂模式分为:简单工厂模式、工厂方法模式、抽象工厂模式在JDK源码中 ,java.util.Calendar使用了工厂模式的简单工厂模式源码如下:...
2020-03-14 12:57:59
900
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人