java

从零开始学springboot整合feign跨服务调用的方法

2021-02-28
介绍 微服务横行的互联网世界, 跨服务调用显得很平凡, 我们除了采用传统的http方式接口调用, 有没有更为优雅方便的方法呢? 答案是肯定的,feign就提供了轻便的方式! 如果你的服务都注册了注册中心,比如nacos, 那么调用会显得很轻松, 只需一个注解, 带上需要调用的服务名即可,**feign + nacos**会帮你做剩余的事. 如果没有注册中心, 也无需担心, feign一样可以以传统的 ip:port 方式进行调用~ 下面,我们来实践下吧 springboot整合feign 引入依

Java发起http请求的完整步骤记录

2021-02-28
前言 在未来做项目中,一些功能模块可能会采用不同的语言进行编写.这就需要http请求进行模块的调用.那么下面,我将以Java为例,详细说明如何发起http请求. 一.GET与POST GET和POST是HTTP的两个常用方法. GET指从指定的服务器中获取数据 POST指提交数据给指定的服务器处理 1.GET方法 使用GET方法,需要传递的参数被附加在URL地址后面一起发送到服务器. 例如:http://121.41.111.94/submit?name=zxy&age=21 特点: GET请求

解决RedisTemplate存储至缓存数据出现乱码的情况

2021-02-28
前言 RedisTemplate是Spring对于Redis的封装. 如上图所示,RedisTemplate中定义了对5种数据结构操作. redisTemplate.opsForList();//操作list redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForCluster();//集群时使用 redisTemplate.opsForGeo();//地理位置时使用 redisTemplate.opsForHash();//操作hash

多线程_解决Runnable接口无start()方法的情况

2021-02-28
为什么需要定一个类去实现Runnable接口呢?继承Thread类和实现Runnable接口有啥区别呢? 实现Runnable接口,避免了继承Thread类的单继承局限性.覆盖Runnable接口中的run方法,将线程任务代码定义到run方法中. 创建Thread类的对象,只有创建Thread类的对象才可以创建线程.线程任务已被封装到Runnable接口的run方法中,而这个run方法所属于Runnable接口的子类对象,所以将这个子类对象作为参数传递给Thread的构造函数,这样,线程对象创建

Java异常处理实例详解

2021-02-27
1. 异常例子 class TestTryCatch { public static void main(String[] args){ int arr[] = new int[5]; arr[7] = 10; System.out.println("end!!!"); } } 输出:(越界) Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at TestTryCatch.

详解Java中两种分页遍历的使用姿势

2021-02-27
在日常开发中,分页遍历迭代的场景可以说非常普遍了,比如扫表,每次捞100条数据,然后遍历这100条数据,依次执行某个业务逻辑:这100条执行完毕之后,再加载下一百条数据,直到扫描完毕 那么要实现上面这种分页迭代遍历的场景,我们可以怎么做呢 本文将介绍两种使用姿势 常规的使用方法 借助Iterator的使用姿势 1. 数据查询模拟 首先mock一个分页获取数据的逻辑,直接随机生成数据,并且控制最多返回三页 public static int cnt = 0; private static List

Java8优雅的字符串拼接工具类StringJoiner实例代码

2021-02-27
StringJoiner是Java8新出的用于处理字符串拼接的工具类,可以让你的代码看起来更优雅,不拉跨. 假设现在遍历一个字符串集合,需求是每个元素按照 "." 分开. String a = "w", b = "d", c = "n", d = "m", e = "d"; List<String> list = new ArrayList<>(); list.a

SpringBean依赖和三级缓存的案例讲解

2021-02-27
spring中的bean依赖有大体上可以分为两类,共3中形式,下面简单介绍一下. 第一类是构造方法中的循环依赖,这种会报错 @Service public class ServiceA { private ServiceB serviceB; public ServiceA(ServiceB serviceB) { this.serviceB = serviceB; } public void methodA(){ System.out.println("a"); } } @Servi

Java8中forEach语句循环一个List和Map

2021-02-27
在这篇文章中,我将向您展示如何用新的Java 8 forEach语句循环一个List和Map. 1.forEach 和 Map 1.1.常规循环Map常用的方法. Map<String ,Integer> items = new HashMap<>(); items.put("A",10); items.put("B",20); items.put("C",30); items.put("D",40);

java中封装JDBC工具类的实例分析

2021-02-27
对于能够重复使用的代码,我们最好的方法是对它们进行封装,然后在下次使用的使用就可以直接调用了.本篇所要提到的是JDBC工具类,相信大家在学习java时都接触过.那么对于封装它的方法,本篇先对工具类进行简单的说明,列出有关的封装步骤,然后带来相关的实例. 1.说明 在java开发过程中,代码中时常用到一些Scanner.Random一样的类,他们是键盘录入,生成随机数的类,像一个工具一样,在java中被称为工具类. 2.步骤 封装JDBC工具类 加入获取数据库连接对象的方法 加入释放连接的方法 3

Springboot-注解-操作日志的实现方式

2021-02-27
此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 本组件目前针对 Spring-boot 做了 Autoconfig,如果是 SpringMVC,也可自己在 xml 初始化 bean 使用方式 基本使用 maven依赖添加SDK依赖 <dependency> <groupId>io.github.mouzt</groupId> <artifactId>bizlog-sdk</artifactId> <version>

利用stream sorted进行降序排序

2021-02-27
根据value值的大小进行降序排序,并进行截取. public static void main(String[] args) { List<Map<String, Object>> list = Lists.newArrayList(); Map<String, Object> map = Maps.newHashMap(); map.put("id", 1); map.put("value", 20); list.add(ma

Java 数组的两种初始化方式

2021-02-27
一.数组 1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就可以快速计算出要查找元素的内存地址.通过内存地址快速定位该元素,所以数组查找元素的效率较高. 2.随机的对数组进行增删元素,当增加元素的时候,为了保证数组中元素在空间存储上是有序的,所以被添加元素位置后面的所有元素都要向后移动,删除元素也是,后面所有的元素要向前移动,所以数组的增删元素​效率很低.

Spring Boot如何移除内嵌Tomcat,使用非web方式启动

2021-02-27
前言:当我们使用Spring Boot编写了一个批处理应用程序,该程序只是用于后台跑批数据,此时不需要内嵌的tomcat,简化启动方式使用非web方式启动项目,步骤如下: 1.修改pom.xml文件 在pom.xml文件中去除内嵌tomcat,添加servlet依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</

如何修改logback.xml配置文件在resource以外的位置

2021-02-27
因为spring搭建的web项目打包时默认将resource文件夹下的文件一起打包,但是我们又想在打包后修改某些配置 这里以我遇到的logback.xml配置更改默认路径来看 根据LoggerFactory.getLogger的方法找到加载文件的位置,如下 public URL findURLOfDefaultConfigurationFile(boolean updateStatus) { ClassLoader myClassLoader = Loader.getClassLoaderOfO

Java 基于AQS实现自定义同步器的示例

2021-02-27
一.AQS-条件变量的支持 在如下代码中,当另外一个线程调用条件变量的signal方法的时候(必须先调用锁的lock方法获取锁),在内部会把条件队列里面队头的一个线程节点从条件队列里面移除并且放入AQS的阻塞队列里面,然后激活这个线程. public final void signal() {  if(!isHeldExclusively()) {   throw IllegalMonitorException();  }  Node first = firstWaiter;  if(first

Java编写超时工具类实例讲解

2021-02-27
我们在开发过程中,在进行时间操作时,如果在规定的时间内完成处理的话,有可能会回到正确的结果.否则,就会被视为超时任务.此时,我们不再等待(不再执行)的时间操作,直接向调用者传达这个任务需要时间,被取消了. 1.说明 java已经为我们提供了解决办法.jdk1.5带来的并发库Future类可以满足这一需求.Future类中重要的方法有get()和cancel().get()获取数据对象,如果数据没有加载,则在获取数据之前堵塞,cancel()取消数据加载.另一个get(timeout)操作表明,如

教你如何监控 Java 线程池运行状态的操作(必看)

2021-02-27
之前写过一篇 Java 线程池的使用介绍文章<线程池全面解析>,全面介绍了什么是线程池.线程池核心类.线程池工作流程.线程池分类.拒绝策略.及如何提交与关闭线程池等. 但在实际开发过程中,在线程池使用过程中可能会遇到各方面的故障,如线程池阻塞,无法提交新任务等. 如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动线程数.正在排队中的线程数.已经执行完成的线程数.总线程数等. 总线程数 = 排队线程数 +

Java(JDK/Tomcat/Maven)运行环境配置及工具(idea/eclipse)安装详细教程

2021-02-27
Java(计算机编程语言) Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程. Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点. Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. Java环境配置(

Java 如何使用JDBC连接数据库

2021-02-27
一.使用JDBC连接数据库 1.使用JDBC-ODBC桥驱动程序连接数据库 基本步骤: (1)加载并注册数据库驱动 (2)通过DriverManager获取数据库连接 (3)通过Connection对象获取Statement对象 (4)使用Statement接口执行SQL语句 (5)操作ResultSet结果集 (6)关闭连接,释放资源 2.下面进行代码演示 1.注册数据库驱动程序的语法格式如下: DriverManager.registerDriver(Driver driver) 或者 Cl