- 博客(196)
- 资源 (75)
- 收藏
- 关注
原创 多线程快速入门
现代操作系统基本采用时分的形式调度运行的线程,线程分配得到的时间片的多少决定了线程使用处理器资源的多少,也对应了线程优先级这个概念。一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换,更多的线程需要更多的内存空间,线程的中止需要考虑其对程序运行的影响。
2023-09-08 21:03:07 234
原创 eureka迁移到nacos--双服务中心注册
服务注册中心的迁移有多种方式,官网使用nacos sync,还有民间开发的双注册中心组件eureka-nacos-proxy,但是我用了不太顺利,所以用的是阿里巴巴的双注册中心组件edas-sc-migration-starter。如果要用open feign,需要在启动类排除ribbon自动配置,否则服务间调用会报错。点进去可以看到 应该是负载均衡时选择服务出现错误。此时feign会默认调用nacos的服务。正常启动即可发现两边都已经注册。
2023-08-30 13:38:03 2449
原创 iTerm2 + Oh My Zsh 打造舒适终端体验
最终效果图:因为powerline以及homebrew均需要安装command line tool,网络条件优越的同学在执行本文下面内容之前,可以先安装XCode并打开运行一次(会初始化安装components),省去以后在iterm2中的等待时间。另外,git也是必要的,各位可以自行下载安装,除了网络没有任何坑:https://git-scm.com介于此,本文默认各位同学已经安装了git环境和xcode(command line tools),遇到提示找不到git命令或需要安装command
2023-02-14 21:09:43 1229
原创 Spring Boot 配置多个RabbitMQ
在项目中经常遇到一个Spring Boot工程要连接多个RabbitMQ。如果只连接一个,Spring Boot可以零配置连接RabbitMQ,这样不需要做额外的工作。但如果连接多个RabbitMQ,就得做一些配置了。配置文件application.propertiesspring.application.name=rabbitmq-hello # RabbitMQspring.rabbitmq.first.host=node9spring.rabbitmq.first.port=5670s
2022-08-07 18:38:52 1251
原创 @Validated和@Valid区别
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR-303规范),配合BindingResult可以直接提供参数验证结果。其中对于字段的特定验证注解比如@NotNull等网上到处都有,这里不详述。在检验Controller的入参是否符合规范时,使用@Validated或者@Valid在基本验证功能上没有太多区别。但是在分组、注解地方、嵌套验证等功能上两
2022-06-03 10:52:42 427
原创 Spring Boot单元测试集成redis
测试不应该访问外部资源对于单元测试,集成测试里,如果被测试的方法中使用到了redis,你需要去模拟一个单机环境的redis server,因为只有这样,你的测试才是客观的,即不会因为网络和其它因素影响你测试的准确性!redis的内嵌版本embedded-redis它的源码在github上,大家有兴趣可以去看看,非常精简,而且还提供了单机、集群、哨兵多种redis环境,完全可以满足我们的测试需要。添加依赖<!--implementation--><dependency>
2022-03-19 13:51:12 1045
原创 docker+mysql 修改配置后启动失败
最近在学习canal相关知识,于是修改docker中mysql的配置文件mysqld.cnf,修改后执行docker restart mysql后发现没有起来,执行docker logs -f --tail 10 mysql,出现如下的错误:既然配置文件出错了,那改过来就好了,但是执行docker exec -it mysql /bin/bash准备先进入容器再更改配置,发现进不去!!!因为exec命令只适用于正在运行的容器。解决方式方式一在当前主机中存放了docker容器中的配置信息(一般默认目
2022-01-29 14:30:42 2847 2
原创 双注册双订阅模式
双注册双订阅表示一个Provider应用可以将自身的实例信息注册到多个注册中心上,一个Consumer应用可以订阅到多个注册中心上的服务实例信息。如图所示,Provider可以把自身的服务实例信息注册到Nacos和Eureka集群上,Consumer发起服务订阅的时候可以从Nacos和Eureka上订阅服务。1. 双注册双订阅模式分析Spring Cloud自身的编程模型是支持双注册双订阅模式的。在服务注册侧,Spring Cloud各个注册中心都有AutoServiceRegistration的实
2022-01-22 21:28:49 3655
原创 HashSet添加null报空指针异常
HashSet添加null报空指针异常。public class TestSet { public static void main(String[] args) { Set<Integer> hashSet = new HashSet<Integer>(); hashSet.add(2); hashSet.ad...
2018-04-03 16:25:24 9166
原创 mongo副本集配置
使用命令行每个副本集成员以下面命令启动:sudo mongod --dbpath /data/db --replSet rs0在其中一台使用rs.initiate()命令即可成为主服务。 如果要修改host的名称,可执行如下命令:config={"_id":"rs0","members":[{"_id":0,"host":"192.168.88.129:27017"}
2018-03-29 11:02:49 594
原创 BigDecimal使用ROUND_HALF_UP进行四舍五入
BigDecimal bdTest = new BigDecimal(1.745);BigDecimal bdTest1 = new BigDecimal(0.745);bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);S...
2018-03-17 13:25:49 131184 5
翻译 List Set Map之间的不同
它们都继承自Collection类。 10点不同: 序号 属性 java.util.List java.util.Set java.util.Map 1 重复元素 List允许存储重复元素。 Set不允许存储重复元素。 Map以键值对形式存储数据,key不允许重复,value可以重复。 2 插入顺序 List以插入顺序存储元素...
2018-03-17 13:02:01 227
翻译 HashSet Vs LinkedHashSet Vs TreeSet In Java
\ HashSet LinkedHashSet TreeSet 内部工作机制 HashSet内部使用HashMap存储元素 LinkedHashSet内部使用LinkedHashMap存储元素 TreeSet内部使用TreeMap存储元素 元素顺序 HashSet不维护元素的顺序 LinkedHashSet维护元素的插入顺序,元素按插入顺...
2018-03-17 12:53:49 216
原创 单例模式与多线程
本文的知识点非常重要,通过单例模式与多线程技术相结合,在这个过程中能发现很多以前未考虑过的情况,一些不良的程序设计方法如果应用在商业项目中,将会遇到非常大的麻烦。本文的案例也将充分说明,线程与某些技术相结合时要考虑的事情有很多。在学习本文时只需要考虑一件事情,那就是:如何使单例模式遇到多线程是安全的、正确的。在标准的23个设计模式中,单例设计模式在应用中是比较常见的。但在常规的该模式教学资料介...
2018-02-25 22:51:25 290
原创 SimpleDateFormat非线程安全
类SimpleDateFormat主要负责日期的转换与格式化,但在多线程的环境中,使用此类容易造成数据转换及处理的不准确,因为SimpleDateFormat类并不是线程安全的。出现异常本示例将实现实用类SimpleDateFormat在多线程环境下处理日期但得出的结果却是错误的情况,这也是在多线程环境开发中容易遇到的问题。类MyThread.java代码如下:import j...
2018-02-25 10:16:18 372
转载 JAVA 线程池的正确打开方式
当前环境jdk == 1.8Executors 使用的隐患先来看一段代码,我们要创建一个固定线程池,假设固定线程数是4。代码如下:Executors是JAVA并发包中提供的,用来快速创建不同类型的线程池。是不是很简单,创建线程池只需一行代码。对于一些个人项目或临时性的项目,这样写确实没什么问题,而且开发速度很快。但在一些大型项目中,这种做法一般是禁止的。WHY??...
2018-02-24 19:41:26 662
原创 Github上怎样把新commits使用在自己的fork上?
在GitHub上,当我们fork其他人的项目之后,如果原作者在自己的项目做了更新,我们fork的项目是没办法同步更新的。那么如何才能同步更新fork之后的项目呢?有两种方式:界面和命令行。1. 界面 2. 命令行步骤: 1. 配置上游项目地址。即将你 fork 的项目的地址给配置到自己的项目上。比如我 fork 了一个项目,原项目是 wabish/for
2018-01-21 20:55:18 459
转载 为何 response.body().string() 只能调用一次
想必大家都用过或接触过 OkHttp,我最近在使用 Okhttp 时,就踩到一个坑,在这儿分享出来,以后大家遇到类似问题时就可以绕过去。只是解决问题是不够的,本文将 侧重从源码角度分析下问题的根本,干货满满。1.发现问题在开发时,我通过构造 OkHttpClient 对象发起一次请求并加入队列,待服务端响应后,回调 Callback 接口触发 onResponse() 方法
2018-01-10 21:47:50 1179
原创 Git提交到多个远程仓库
随着github的普及和流行,现在程序员可能都习惯把代码托管到类似github的远程仓库中。毫无疑问,github是最受欢迎的托管平台。但是由于网络等种种原因,github在国内的访问并不稳定。于是国内各种托管平台应运而生,比较知名的有开源中国、coding等。很多国内程序员会把代码托管到多个平台,兼顾稳定性和流行性。那么如何方便快捷的把代码托管到多个平台呢?例如我有下面两个仓库: https:/
2017-12-25 00:04:36 5418 1
原创 删除集合中的_class列
默认情况下,Spring Data的MappingMongoConverter为MongoDb中的每个对象添加了一个额外的_class列。例如:public class User { String username; String password; //...getters and setters}保存:MongoOperations mongoOperation = (Mo
2017-12-23 23:29:53 393
原创 mongo副本集ip改变导致启动失败的解决办法
在学习mongo时,通常会在虚拟机中安装多个Linux系统并创建副本集。如果Linux系统没有设置固定ip,ip可能会因为某些原因改变,导致副本集启动失败。本文主要介绍如何处理这类问题。如果只有部分ip改变,启动副本集时某个节点是primary节点。那么在primary节点中执行如下命令:// 1use admin// 2cfg = { _id : "rs0", members: [
2017-12-19 22:54:47 1273
转载 怎么使用Junit进行多线程测试
Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的,主线程终止jvm都停了,其他线程肯定执行不了了(具体分析查看源码org.junit.runner.JUnitCore)。本文介绍一款第三方工具groboutils,配合Junit实现多线程测试。文档官网:http://groboutils.sourceforge.netMaven<de
2017-12-12 13:53:55 2656
原创 Spring Data MongoDB:使用GridFS保存二进制文件
在MongoDB中,可以使用GridFS保存二进制文件。本文介绍如何使用GridFsTemplate保存和读取图片文件。1. GridFS - 保存(使用Spring注解方式)import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configur
2017-12-11 11:20:33 1807
原创 Spring Data MongoDB删除
在Spring Data MongoDB中,可以使用remove()和findAndRemove()删除文档。remove() - 删除一个或多个文档。findAndRemove() - 删除单个文档,并返回删除的文档。常见错误: 不要使用findAndRemove()执行批量删除,因为只有符合条件的第一个文档被删除了。1. 删除文档实例import java.util
2017-12-11 11:19:53 2158
原创 Spring Data MongoDB查询
本文介绍一下使用Query、Criteria和其他常见操作查询文档的例子。测试数据> db.users.find(){ "_id" : ObjectId("id"), "ic" : "1001", "name" : "ant", "age" : 10 }{ "_id" : ObjectId("id"), "ic" : "1002", "name" : "bird", "age" : 2
2017-12-11 11:19:05 574
原创 Spring Data MongoDB更新
本文主要借号如何使用Spring Data MongoDB进行CRUD操作,有两种方式:注解方式和XML方式。1. 引入依赖<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.10.7.RELEASE</
2017-12-11 11:18:36 5012
原创 Spring Data MongoDB插入
本文主要借号如何使用Spring Data MongoDB进行CRUD操作,有两种方式:注解方式和XML方式。1. 引入依赖<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.10.7.RELEASE</
2017-12-11 11:18:07 584
原创 Spring Data MongoDB基本操作
本文主要借号如何使用Spring Data MongoDB进行CRUD操作,有两种方式:注解方式和XML方式。1. 引入依赖<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.10.7.RELEASE</
2017-12-11 11:17:41 374
原创 Java MongoDB 保存图片
本文介绍如何使用GridFS API把图片文件保存到MongoDB。GridFS API也能保存其他二进制文件,如视频和音乐文件。1. 保存图片下面代码使用photo命名空间,新的filename保存图片到MongoDB。String newFileName = "mkyong-java-image";File imageFile = new File("mongodb.png");GridFS
2017-12-10 13:43:27 2789
原创 Java MongoDB 删除
本文介绍如何使用collection.delete()删除文档。测试数据插入10个文档:for (int i = 1; i <= 10; i++) { collection.insertOne(new Document().append("number", i));}1. collection.delete()下面是几个删除文档的例子。例1获取第一个文档并删除。本例中number = 1的
2017-12-10 13:42:43 6635
原创 Java MongoDB 查询
本文介绍如何从集合中查询文档的通用方法。测试数据插入5条测试文档{ "_id" : { "$oid" : "id"} , "number" : 1 , "name" : "mkyong-1"}{ "_id" : { "$oid" : "id"} , "number" : 2 , "name" : "mkyong-2"}{ "_id" : { "$oid" : "id"} , "number" :
2017-12-10 13:42:04 852
原创 Java MongoDB 更新
本文介绍如何使用collection.update()更新文档。测试数据假设已经插入下面数据:{ "hosting" : "hostA", "type" : "vps", "clients" : 1000},{ "hosting" : "hostB", "type" : "dedicated server", "clients" : 100},
2017-12-10 13:41:20 2405
原创 Java MongoDB 插入
本文介绍3中插入文档的方法。1. 使用Document插入文档Document document = new Document();document.put("database", "test");document.put("table", "hosting");Document documentDetail = new Document();documentDetail.put("recor
2017-12-10 13:40:34 1484
原创 Java MongoDB 认证
默认情况下,MongoDB不需要用户名和密码即可运行。本文介绍如何使用MongoDB驱动在安全模式下连接数据库。1. 安全模式下启动MongoDB使用--auth参数启动MongoDB,然后需要用户名和密码才能对数据库进行操作。mongod --auth添加相应的数据库和用户:> use admin> db.addUser("admin","password")> use testdb> db
2017-12-10 13:39:31 1714 1
原创 Java MongoDB 基本操作
本文介绍如何使用Java操作MongoDB,如创建连接数据库、集合和文档,保存、更新、删除和查询文档。1. 引入依赖<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.5.0</version></dependency>2. Mon
2017-12-10 13:36:51 4919
翻译 Spring Boot CommandLineRunner和ApplicationRunner
Maven配置CommandLineRunnerApplicationRunnerCommandLineRunner和ApplicationRunner的执行顺序在spring boot应用中,我们可以在程序启动之前执行任何任务。为了达到这个目的,我们需要使用CommandLineRunner或ApplicationRunner接口创建bean,spring boot会自动监测到它们。这两个
2017-11-30 22:42:10 2028
翻译 MongoDB:使用keyfile访问控制的方式部署副本集
简介副本集强制访问控制需要配置:使用内部认证机制保证副本集成员之间的安全使用基于角色的访问控制保证连接客户端和副本集的安全本教程中,副本集的每个成员使用了相同的内部认证机制和设置。强制内部认证即强制用户访问控制。为了连接到副本集,像mongo shell的客户端需要使用用户账号。注意事项Keyfile安全Keyfiles是安全的最小格式,非常适合测试和开发环境。对于生产环境,推荐使用x.509
2017-11-29 21:23:50 8081 2
翻译 MongoDB:部署副本集
本文介绍如何把没有访问控制的三个已存在的mongo实例创建成包含3个成员的副本集。如果要部署有访问控制的副本集,可以查看Deploy Replica Set With Keyfile Access Control。如果要把单独的mongo实例部署为副本集,可以查看Convert a Standalone to a Replica Set。简介3个成员的副本集提供了足够的冗余以保证大部分的网络问题和其
2017-11-29 21:21:50 852
翻译 MongoDB:把单机实例转换成副本集
本文介绍如何把独立的mongo实例转换成包含3个成员的副本集。开发和测试使用独立实例,生产使用副本集。如何安装独立的mongo实例本文不再赘述。如果在部署副本集时还没有安装mongo实例,可以查看部署副本集;步骤停止独立的mongo实例服务。重启实例。使用--replSet选项配置副本集的名字。例如,下面命令启动独立的实例作为副本集rs0的一个成员。它使用了独立的数据库路径/srv/mongod
2017-11-29 21:19:30 4637
原创 MongoDB 导入导出
本文介绍使用mongoexport和mongoimport命令备份和恢复数据。1. 使用mongoexport命令备份数据库相关命令参数:$ mongoexport --helpExport MongoDB data to CSV, TSV or JSON files.options: -h [ --host ] arg mongo host to connect to ( <
2017-10-28 23:25:05 1058
ASP.NET 2.0+SQL Server 2005全程指南-源代码
2009-02-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人