Java
文章平均质量分 67
BlueKitty1210
以微观之处证宏观,借他人之事鉴己身~
展开
-
SpringBoot使用CommandLineRunner和ApplicationRunner执行初始化业务
业务场景在业务场景中,有些情况下需要我们一启动项目就执行一些操作.例如数据配置的相关初始化,通用缓存的数据构造等.SpringBoot为我们提供了CommandLineRunner和ApplicationRunner两个接口来实现这个功能.接口说明CommandLineRunner和ApplicationRunner两个接口除了参数不同,其他基本相同,可以根据实际需求选择使用.CommandLineRunner中的run方法参数为String..., ApplicationRunn...原创 2020-07-20 11:12:58 · 1816 阅读 · 0 评论 -
线程池异步线程中再次获取线程池资源的问题
问题描述在线上发生的一次问题, 在场景中有这样一个业务, 需要异步执行一个主任务, 主任务中又包含着N个子任务,为了整个主任务能够快速处理, 又将子任务按照数量获取线程资源异步处理, 即异步线程A中再异步调用A1,A2,A3. A可能同时存在多个.实际场景中, 由于系统线程池分配数量较小, 且一段时间内先后启动了多个主任务, 耗时的主任务中又用子任务取申请线程 导致线程池资源耗尽问题原因1. 主任务是从线程池中获取的线程资源, 同时主任务比较耗时2. 每个主任务中包含的N的子任务, 会再.原创 2020-07-17 18:58:54 · 1913 阅读 · 3 评论 -
FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析
FastJson在将bean转成JSON字符串时, 默认使用CamelCase(驼峰命名)的配置;在1.2.15版本之后,FastJson支持配置PropertyNamingStrategy,有四种配置格式: CamelCase; PascalCase; SnakeCase; KebabCase.1 . 配置项内容配置方式 说明 Java属性名 JSON属性名 C...原创 2019-11-25 21:28:51 · 4344 阅读 · 0 评论 -
SpringBoot中fastJson返回数据展示null字段(响应值为null时字段被过滤)
fastjson将对象转为json字符串给前端的时候, 如果字段的值为null, 则该字段默认被fastJson过滤直接不展示. 而在实际项目中我们往往也是需要展示这个字段的 , 解决即增加一个fastJson序列化配置 , 设置序列化格式.package com.xbz.mvc.config;import com.alibaba.fastjson.serializer.Serializ...原创 2019-10-15 10:46:29 · 6145 阅读 · 0 评论 -
Dubbo新手入门实例HelloWorld(zookeeper)
最近刚接触dubbo,新手入门遇到好多麻烦,网上搜来的入门demo也是各种问题,百般周折自己终于倒腾出来了,与大家共享~1.创建服务方项目dubbo-server,在pom.xml中构建项目依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-...原创 2016-05-26 15:47:24 · 12095 阅读 · 15 评论 -
JAVA中url的特殊字符处理及url转码解码
在url中 , 只能使用url合法的字符 . 如果使用了非法字符来访问某资源(如:+#等) , 就会导致资源访问异常或失败 . 同时原生url中也是不支持中文的 , 以百度为例 , 当你搜索了中文关键词时 , 可以在url地址栏中明显的看出来中文被"编码转换了" . 本章暂时先不讨论特殊代码及中文字符的原因 , 先讲一下如何解决url中的特殊字符问题;package com;import原创 2017-11-13 16:33:56 · 31776 阅读 · 0 评论 -
Eclipse使用TODO标签管理任务及自定义TODO标签
Eclipse中 , 使用Tasks可以在代码里增加标识,通过Tasks view可以快速的找到这些标识的地方,有助于提高开发效率和代码管理。如下所示 : package test;public class MyTodoDemo { void testMethod() { // TODO 在标识处有功能代码待编写 // FIXME 标识处代码需要修原创 2017-12-05 18:53:38 · 3879 阅读 · 0 评论 -
阿里巴巴开发公约节选(日常编程较常用的一些)
========================= JAVA代码 ========================1 . 【强制】抽象类命名使用 Abstract 或 Base 开头 ; 异常类命名使用 Exception 结尾 ; 测试类命名以它要测试的类的名称开始,以 Test 结尾。2 . 【强制】中括号是数组类型的一部分,数组定义如下: String[] args;原创 2017-12-05 18:20:21 · 1667 阅读 · 0 评论 -
Spring定时任务并行(异步)处理
最近项目中遇到一个问题 , 在SpringBoot中设置了定时任务之后 , 在某个点总是没有执行 . 经过搜索研究发现 , spring 定时器任务scheduled-tasks默认配置是单线程串行执行的 . 即在当前时间点之内 . 如果同时有两个定时任务需要执行的时候 , 排在第二个的任务就必须等待第一个任务执行完毕执行才能正常运行.如果第一个任务耗时较久的话 , 就会造成第二个任务不能及时原创 2017-12-05 11:50:37 · 16068 阅读 · 4 评论 -
JSON中单双引号的处理
在项目中 , 经常需要将数据封装为一个JSON对象返回给前台进行解析 . 但如果数据中包含双引号或单引号 , 就会导致部分框架在解析JSON时失败 , 无法处理(笔者后台采用的fastjson封装json , 前台用jquery解析json) , 所以这部分数据就需要进行特殊处理 , 使之能够正常解析.一般来说 , 碰到单引号或双引号 , 用斜杠"\"转椅就行 . 但在实际应用中 , 这种方法原创 2016-08-24 09:20:49 · 8105 阅读 · 0 评论 -
SpringBoot集成Redis
1 . 增加POM依赖 org.springframework.boot spring-boot-starter-cache org.springframework.boot spring-boot-starter-data-redis2 . SpringBoot配置文件spring: #redis redis: ho原创 2017-12-08 17:33:49 · 496 阅读 · 0 评论 -
SpringBoot MySql Druid配置主从数据源(多个数据源)
1 . POM依赖 mysql mysql-connector-java org.mybatis.spring.boot mybatis-spring-boot-starter 1.1.1 com.alibaba druid 1.0.282 . SpringBoot数据源配置spring: datasource: type: com.alib原创 2017-12-08 17:25:05 · 12973 阅读 · 4 评论 -
有趣的代码注释
网上看到的有意思的代码注释 , 搬运过来的 , 侵删~// _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) //转载 2017-12-08 17:39:52 · 864 阅读 · 0 评论 -
SpringBoot防XSS攻击
1 . pom中增加依赖 org.jsoup jsoup 1.9.22 . 增加标签处理类package com.xbz.utils;import org.apache.commons.lang3.StringUtils;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;impor原创 2017-12-21 09:49:27 · 27980 阅读 · 3 评论 -
SpringMVC防止XSS攻击
XSS全称为跨站脚本攻击 , 具体见百度百科最常见的是用Filter来预防 , 就是创建一个新的httpRequest类XsslHttpServletRequestWrapper,然后重写一些get方法(获取参数时对参数进行XSS判断预防).1 . 在web.xml中添加Filter XssFilter com.xbz.filter.XssF原创 2017-12-11 17:48:20 · 10949 阅读 · 3 评论 -
HTML页面在IOS上出现卡顿的解决方案(overflow:scroll)
之前在给app做html页面时出现一个奇怪的一个问题 , 相同的一个网页 , 在Android上非常流畅无任何问题 , 而在IOS端浏览时 , 页面滑动起来有明显的卡顿感 . 经网上搜索了解后 , 发现页面中使用了overflow:scroll属性所致(在滑动的div上添加该属性) . 由于本人对前端不甚了解 , 不知道是HTML的问题还是IOS的问题 , 具体谁的锅也无法得知 . 对此原创 2017-12-21 10:07:51 · 9867 阅读 · 0 评论 -
SpringBoot继承TkMapper通用Mapper
MyBatis通用Mapper提供了基本的CRUD的api , 省略了写大量基础代码甚至高级代码的时间 , 方便快捷 , 提升工作效率 . 可以参考通用Mapper文档SpringBoot集成通用Mapper , 首先也是添加依赖 org.mybatis mybatis-spring 1.3.0原创 2017-12-21 10:40:40 · 8846 阅读 · 0 评论 -
Intellij IDEA自定义类注释模板
/** * @title * @description * @author ${USER} *@createDate ${DATE} *@version 1.0 */设置以上内容以后 , 新建类时会自动添加注释 , 如下所示 : 由于idea会按照自个的格式自动格式化 , 会导致顺序和我们定义的不一样 , 如果想按照自己定义的顺序进行显示原创 2018-01-12 11:24:26 · 1888 阅读 · 1 评论 -
Intellij IDEA 自定义方法注释/方法模板
IDEA相比Eclipse有个弊端 , 就是自定义方法注释方面有些笨拙 . 对方法进行自定义注释 , 需要使用IDEA的Live Templates来间接完成1 . 打开Live Templates设置面板2 . 点击最右边的绿色加号按钮 , 首先添加Template Group模板组 , 在弹出的窗口中为自己的模板组命名(建议命名清晰明确 , 与系原创 2018-01-12 11:28:39 · 19010 阅读 · 3 评论 -
SpringBoot集成Shiro进行权限控制和管理
1 . 添加依赖<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.5</version></dependency>原创 2018-03-07 14:16:37 · 1833 阅读 · 0 评论 -
Java8新特性总结 - 序
Java8已经正式发布很久了 , 从各项新特性来讲 , Java8无疑是重大的版本升级 . Orcale公司于2014年3月18日发布Java8 , 新增了非常多的特性 . 但时至今日 , 大部分人在项目中依然使用着Java7及之前的新特性 . 所谓没有实践就不会深入详细的理解运用 , 故今天抛砖引玉 , 和大家一起探讨Java8在实际代码中的运用 .所有示例代码打包下载 : 点击打开链接...原创 2018-02-28 09:49:31 · 391 阅读 · 2 评论 -
Java8新特性总结 - 1.接口新增默认方法和静态方法
所有示例代码打包下载 : 点击打开链接Java8新特性 : 接口新增默认方法和静态方法Optional类Lambda表达式方法引用Stream API - 函数式操作流元素集合Date/Time API新API和工具Nashorn , JavaScript引擎1 . 接口默认方法和静态方法 静态方法比较简单 , 就是用static修饰的方法 , 可以用接口名.方法名直接调用 , 不可重写 ....原创 2018-02-28 09:55:47 · 909 阅读 · 0 评论 -
Java8新特性总结 - 2.Optional类
所有示例代码打包下载 : 点击打开链接Java8新特性 : 接口新增默认方法和静态方法Optional类Lambda表达式方法引用Stream API - 函数式操作流元素集合Date/Time API新API和工具Nashorn , JavaScript引擎2 . Optional类 Java中最常见的BUG就是空指针异常 . 在Java8之前 , Google Guava引入了Optio...原创 2018-02-28 10:20:33 · 996 阅读 · 0 评论 -
Java8新特性总结 - 3. Lambda表达式
所有示例代码打包下载 : 点击打开链接Java8新特性 : 接口新增默认方法和静态方法Optional类Lambda表达式方法引用Stream API - 函数式操作流元素集合Date/Time API新API和工具Nashorn , JavaScript引擎3. Lambda表达式 Lambda表达式 , (函数式编程 , 也称为闭包)是Java8中最大和最令人期待的语言改变 . 它允许我...原创 2018-02-28 10:33:33 · 581 阅读 · 0 评论 -
Java8新特性总结 - 4.方法引用
所有示例代码打包下载 : 点击打开链接Java8新特性 : 接口新增默认方法和静态方法Optional类Lambda表达式方法引用Stream API - 函数式操作流元素集合Date/Time API新API和工具Nashorn , JavaScript引擎4 . 方法引用 方法引用的基本思想是 , 如果一个Lambda代表的只是"直接调用这个方法" , 那最好还是用名称来调用它 , 而不...原创 2018-02-28 10:38:32 · 416 阅读 · 0 评论 -
Java8新特性总结 -5.Stream API函数式操作流元素集合
所有示例代码打包下载 : 点击打开链接Java8新特性 : 接口新增默认方法和静态方法Optional类Lambda表达式方法引用Stream API - 函数式操作流元素集合Date/Time API新API和工具Nashorn , JavaScript引擎5 . Stream API - 函数式操作流元素集合 Stream流是Java8 API的新成员 , 它允许你以声明的方式处理数据集...原创 2018-02-28 13:37:42 · 2594 阅读 · 0 评论 -
Java8新特性总结 -6.Date/Time API
所有示例代码打包下载 : 点击打开链接Java8新特性 : 接口新增默认方法和静态方法Optional类Lambda表达式方法引用Stream API - 函数式操作流元素集合Date/Time API新API和工具Nashorn , JavaScript引擎6 . Date/Time API 在了解Java8的新Date/Time之前 , 先看一下之前的日期/时间存在哪些问题?非线程安全 ...原创 2018-02-28 13:52:08 · 572 阅读 · 0 评论 -
Java8新特性总结 -7.新API和工具
所有示例代码打包下载 : 点击打开链接Java8新特性 : 接口新增默认方法和静态方法Optional类Lambda表达式方法引用Stream API - 函数式操作流元素集合Date/Time API新API和工具Nashorn , JavaScript引擎7 . 新API和工具7.1 重复注解 Java8之前 , 注解在同一位置只能声明一次 . 在Java8中 , 允许同一个位置声明多次...原创 2018-02-28 14:01:46 · 662 阅读 · 0 评论 -
Java8新特性总结 -8.Nashorn , JavaScript引擎
所有示例代码打包下载 : 点击打开链接Java8新特性 : 接口新增默认方法和静态方法Optional类Lambda表达式方法引用Stream API - 函数式操作流元素集合Date/Time API新API和工具Nashorn , JavaScript引擎8 . Nashorn , JavaScript引擎 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1....原创 2018-02-28 14:06:29 · 2149 阅读 · 0 评论 -
JAVA设计模式 - 单例模式
单例模式(Singleton)是软件设计中一种比较常见的 , 相对简单的设计模式 . 1 . 单例模式的定义 所谓单例 , 指的就是单示例 , 即某个类的实现对象有且仅能有一个 , 并提供对外调用的方法2 . 单例模式的特点单例类只能有一个实例单例类必须创建自己的唯一示例 , 其他对象不可替代操作单例类必须向其他对象提供这一实例3 . 单例模式的实现思路将该类的构造方法设为私有方法 ...原创 2018-03-15 15:03:31 · 256 阅读 · 0 评论 -
JAVA设计模式 - 工厂方法模式
工厂方法模式(Factory Pattern) 是一种创建型设计模式 , 它是Java中最常用的设计模式之一 . 1 . 工厂方法模式的定义 定义一个创建对象的接口 , 让子类决定实例化哪一个类 . 工厂方法模式使一个类的实例化延迟到子类2 . 工厂方法模式的特点 将"类实例化的操作"和"使用对象的操作"分开 , 让使用者不用知道具体参数就可以实例化出所需要的"产品"类 , 从...原创 2018-03-16 17:53:52 · 250 阅读 · 0 评论 -
SpringCloud微服务注册调用入门-断路器
1 . 断路器概念 上篇文中我们完成了一个最简单的一个微服务注册与调用的项目 , 但这是远远不够的 . 在实际的微服务架构中 , 通常是根据业务来拆分成一个个的服务 , 服务与服务之间可以相互调用(RPC) , 在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用 . 为了保证其高可用 , 单个服务通常会集群部署(如我们demo中的service-hell...原创 2018-03-30 11:00:02 · 311 阅读 · 0 评论 -
JAVA设计模式 - 抽象工厂模式
抽象工厂模式(Abstact Factory Pattern) , 也是创建型模式之一 . 之前主要介绍了工厂方法模式 , 抽象工厂模式和工厂方法模式稍有区别 . 工厂方法模式中工厂类生产出来的产品都是具体的 , 也就是说每个工厂都会生产某一种具体的产品 , 但是如果工厂类中所生产出来的产品是多种多样的 , 工厂方法模式也就不再适用了 , 就要使用抽象工厂模式了 . 1 . 抽象工厂模式的...原创 2018-04-02 17:03:35 · 291 阅读 · 0 评论 -
JAVA设计模式 - 原型模式
在开发过程中 , 有时会遇到为一个类创建多个实例的情况 , 这些实例内部成员往往完全相同或有细微的差异 , 而且实例的创建开销比较大或者需要输入较多参数 , 如果能通过复制一个已创建的对象实例来重复创建多个相同的对象 , 这就可以大大减少创建对象的开销 , 这个时候就需要原型模式 . 1 . 原型模式的定义 原型模式可以通过一个对象实例确定创建对象的种类 , 并且通过拷贝创建新的实例...原创 2018-04-03 13:09:39 · 347 阅读 · 0 评论 -
JAVA设计模式 - 建造者模式
建造者模式 , 又称为生成器模式 . 是创建型模式之一 . 与工厂方法模式和抽象工厂模式不同 , 这两种模式的目的是为了实现多态性 , 而建造者模式的目的则是为了将对象的构建与展示分离 . 建造者模式是一步一步创建一个复杂对象的创建型模式 , 它允许用户在不知道内部构建细节的情况下 , 可以更精细地控制对象的构造流程 . 一个复杂的对象有大量的组成部分 , 比如汽车它有车轮 , 方...原创 2018-04-03 15:51:29 · 208 阅读 · 0 评论 -
JAVA设计模式 - 创建型模式总结
JAVA设计模式 - 单例模式JAVA设计模式 - 工厂方法模式JAVA设计模式 - 抽象工厂模式JAVA设计模式 - 原型模式JAVA设计模式 - 建造者模式1 . 创建型模式的定义 顾名思义就是创建对象的模式 , 创建型模式抽象了实例化的过程 . 它们帮助一个系统独立于如何创建 , 组合和表示它的那些对象 . 一个类创建型模式使用继承改变被实例化的类 , 而一个对象创建型模式将实例化委托...原创 2018-04-03 16:20:24 · 519 阅读 · 0 评论 -
SpringCloud微服务注册调用入门-路由网关
1 . 路由网关的介绍 路由网关(Zuul)的主要功能是路由转发和过滤器 . 路由功能是微服务的一部分 , 比如/service/user转发到到用户服务 , /service/shop转发到到商店服务等 . zuul默认和Ribbon结合实现了负载均衡的功能2 . 路由实现2.1 与之前类似 , 新建模块zuul , 引入路由依赖<dependency> <group...原创 2018-04-03 17:31:17 · 1332 阅读 · 0 评论 -
SpringCloud微服务注册调用入门教程
关于SpringCloud的相关知识在此不做讨论 , 直接一步步完成一套简单完整的SpringCloud微服务注册与调用的Demo .1 . 创建一个maven主工程 , 填写工程信息 , Finish2 . 创建一个新的model作为服务注册中心在这里 , 我们需要用的组件是Spring Cloud Netflix的Eureka , Eureka是一个服务注册和发现的模块 .2.1 首先...原创 2018-03-29 14:55:47 · 2515 阅读 · 0 评论 -
Java中三种字符串的拼接(++ , String.format , StringBuilder.append)
在Java中 , 对字符串内容的拼接是比较常见的操作 , 通常有三种方式 . 用String类重载'+'运算符进行拼接本质上是调用StringBuilder.append . 用类似C的printf风格 , 调用String.format() . 底层是调用formatter.format方法 . 用原生的StringBuilder.append方法 . 那从性能和内存占用两个方面...原创 2018-04-24 11:36:55 · 17898 阅读 · 4 评论 -
Spring获取前台参数的几种方式
1 . 自动注入 /* 自动注入 , 直接写在controller方法的形参中 , 前后端名称需保持一致 */ @RequestMapping("/test1") public String test1(String name , Integer age , Long time , Person person) { return "Hello " + name...原创 2018-04-24 15:04:46 · 2809 阅读 · 0 评论