`
文章列表
    在实际的工作中,有时可能存在2个java bean属性之间的拷贝,而如果使用bean 之间setter方法进行设置,那么将会存在大量的冗余的代码,因此可以考虑使用反射来进行属性的拷贝操作。 大致思路如下: 1、从class文件中,获取到所有的public类型的方法 2、获取到所有的getter方法和setter方法,getter方法的获取需要考虑到boolean类型这个比较特殊的类型的获取。 3、进行属性的拷贝的时候,需要考虑到源对象中的属性值为null,是否应该拷贝到目标对象中 4、一个class文件中的getter和setter方法一般都是不可变的,因此需要进行缓存起来 ...
    在一个系统中认证和授权是常有的事情,现在比较流行的框架有spring security、shiro等等。他们都能很好的帮助我们完成认证和授权的功能。那么假如说让我们自己完成一个登录那么应该大致的流程是怎么样的呢?   一、我们肯定有一个处理页面上表单提交的url处理器,此处我们放置在Filter中进行处理,假如就叫做UsernamePasswordAuthenticationFilter  ,在这个Filter里面我们需要将用户提交上来的用户名和密码封装成一个对象,假如叫做UsernamePasswordAuthenticationToken。 二、有了上一步的 Usernam ...
    spring data jpa为我们实现简单的crud操作提供了极大的方便。但大部分情况下,系统中都存在大量的动态查询操作,这个时候就可以借助spring data jpa的 Specification动态查询操作。但这个动态查询操作的大部分的代码都是重复的,因此可以考虑将Specification进一步封装.一个查询条件的构成,需要知道是查询的是那个字段(field),用的是什么类型的操作符(op),以及是什么数据类型的(dataType),如果我们前台封装好,传递到后台,后台在进行解析就知道如何进行查询了。 思路:    1、前台提交查询条件时,提交的 key: 为h_后台实体 ...
最近在学习mongodb的知识,因此记录下mongodb学习的过程。 一、mongodb的安装 1、进入官网,找到mongodb的下载地址 https://www.mongodb.com/download-center?jmp=nav#community, 由于我是在windows电脑上学习的,因此下载的是windows版本。 2、将下载下来的安装包,双击进行安装即可。 3、在mongodb的安装目录下,新建data、etc和logs目录       data目录: 用于存放mongodb的数据       etc目录: 用于存放mongodb启动时的配置文件         ...
     最近项目中用到了vue,其中状态的集中管理使用到了vuex,因此就学习vuex做一个简单的记录。vuex的官方网址如下: https://vuex.vuejs.org/zh-cn/  vuex      当我们的项目慢慢做大的时候,各个父组件和子组件之间有些状态需要项目共享,比如用户在父组件中登录后,在各个子组件中需要用到登录信息,虽然可以使用父子组件之间的通选解决,但是使用vuex可以达到更好的效果。      在vuex中有几个核心的概念:      state : 这个就是父子组件中需要共享的状态,即共享的数据,比如用户的登录信息等      action: 这个可以 ...
    在我们的实际开发中可能存在这么一种情况,当方法参数中的某些条件成立的时候,需要执行一些逻辑处理,比如输出日志。而这些代码可能都是差不多的,那么这个时候就可以结合自定义注解加上切面加上spel表达式进行处理。就比如在spring中我们可以使用@Cacheable(key="#xx")实现缓存,这个#xx就是一个spel表达式。 需求:我们需要将service层方法中方法的某个参数的值大于0.5的方法,输出方法执行日志。(需要了解一些spel表达式的语法) 实现步骤:       1、自定义一个注解Log       2、自定义一个切面,拦截所有方法上存在@L ...
     我们知道es在字段的mapping建立后就不可再次修改mapping的值。在我们实际的情况下有些时候就是需要修改mapping的值,解决方案就是重新构建索引数据。 方式一 :     使用索引别名,创建另外一个索引、使用scroll滚屏搜索插入数据、等等,(网上有很多这样的例子,略) 方式二:(参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html)     使用es的 _reindex api进行解决。     注意: _reindex获取的索引的快照的数 ...
    在es中,我们有时候可能需要映射,{ "field" : "xx" , "field01" : [] }这样格式的嵌套对象,默认情况下es会将field01的type映射成object类型,这个时候,我们去查询可能就会出现问题。需要手动修改成nested嵌套类。型。 一、有问题的情形演示。 1、插入数据,es默认会自动创建映射 curl -XPUT "http://192.168.99.1:9200/nestedindex/personinfo/1" -d' { "name" ...
    在es中我们可能会有这么一种需求,即有时需要批量向es中插入或更新或删除数据,如果一条一条数据的操作,那么速度必然很慢,那么es的bulk api就可以派上用场。   delete 删除操作,只需要写一个json即可create 创建操作,如果需要创建的文档已经存在,那么创建失败index 创建或替换操作,如果要创建的文档不存在则执行创建操作,如果已经存在则执行替换操作update 更新操作  执行文档的更新#需求:    1、使用create创建编号为21、22、23的文档    2、使用create再次创建编号为22的文档,此时会失败,因为编号为22的文档已经存在    3、使 ...
     记录一下,elasticsearch从创建索引到插入数据的一个crud操作。 一、创建索引 curl -XPUT "http://192.168.99.1:9200/productindex" -d' { "settings": { "number_of_shards": 1, "number_of_replicas": 1 }, "mappings": { "product" : { " ...
     测试es的dsl查询,准备数据,在插入数据的时候,如果index、type、mapping都没有,es会自动创建 一、数据的准备 curl -XPOST "http://192.168.99.1:9200/new_index/product/p1" -d' { "name":"new Mac Book" }' curl -XPOST "http://192.168.99.1:9200/new_index/product/p2" -d' { "name":& ...
1、创建索引(test_index) curl -XPUT "http://192.168.99.1:9200/test_index"  2、创建索引,指定分片和副本的数量 curl -XPUT "http://192.168.99.1:9200/test_index" -d' { "settings": { "number_of_shards": 2, "number_of_replicas": 1 } }'  3、创建索引(test_index) ...
     在我们实际的开发中可能存在这么一种情况,应用程序要向一个队列名为queue的队列中发送3条消息,需要保证这3条消息按顺序消费。必须是第一条消费完,在消费第二条然后是第三条。而我们的程序中可能有时候存在多个consumer对这个队列进行消费,那么可能出现消息时按1,2,3进行消费的,但第二条可能比较耗时,就会导致第2条消息没有消费完,第三条消息就已经消费完了,这个时候可能就会出现问题。      解决方案:1、使用独有消费者就可以解决这个问题。(在创建队列的时候,向队列后面增加参数 ?consumer.exclusive=true)                         ...
    在我们编写代码的过程中,spring data jpa为我们的持久层提供的极大的方便,但有时spring data jpa提供的repository并不能完全满足我们开发的需求,因此就需要进行扩展。spring data jpa的repository的扩展可以对对单个repository的扩展,也可以对全局的扩展,本博客考虑的是对全局的扩展。  对单个repository的扩展可以考虑看这篇文章。 思路:(大致参考spring data jpa的官方文档,链接如下:http://docs.spring.io/spring-data/jpa/docs/1.11.1.RELEASE/r ...
    在我们实际的程序开发中,经常需要用到从excel导入数据中系统中,而为了防止用户在excel中乱输入文字,有些需要用到下拉选的地方,就需要从程序中动态生成模板。本例子简单的讲解一下,如何生成级联下拉选。   效 ...
Global site tag (gtag.js) - Google Analytics