-
SpringCloud-Feign
Feign客户端前言 之前在使用消费服务调用用户服务时,都是通过RestTemplate.getForObject方法进行调用的。虽然使用了Ribbon和Hystrix可以实现负载均衡和容错处理,但是这个编码在实现大量业务时会显得太过于冗余(如,多参数的URL拼接)。Feign简介 实例在之前的Eureka项目上进行Feign整合。添加依赖给他EurekaConsumer添加feign依赖。<dependency> <groupId>org.sprin...…
-
SpringCloud-Hystrix
容错保护:Hystrix前言 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。 如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。 Hystrix简介 ...…
-
SpringCloud-Ribbon
负载均衡 Ribbon 如果为同一个的提供者在Eureka中注册了多个服务,那么客户端该如何选择服务呢?这时,就需要在客户端实现服务的负载均衡。在Spring Cloud中推荐使用Ribbon来实现负载均衡。Ribbon简介 Ribbon架构 实例实例从上次Eureka项目上进行整合。添加依赖为消费者服务添加Ribbon依赖<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cl...…
-
SpringCloud-Eureka
Eureka简介 Eureka包含两个组件:Eureka Server和Eureka Client。 Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。 Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-ro...…
-
SpringCloud入门
微服务架构目前微服务是非常火的架构或者说概念,也是在构建大型互联网项目时采用的架构方式。单体架构单体架构,是指将开发好的项目打成war包,然后发布到tomcat等容器中的应用。假设你正准备开发一款与Uber和滴滴竞争的出租车调度软件,经过初步会议和需求分析,你可能会手动或者使用基于Spring Boot、Play或者Maven的生成器开始这个新项目,它的六边形架构是模块化的 ,架构图如下: 应用核心是业务逻辑,由定义服务、领域对象和事件的模块完成。围绕着核心的是与外界打交道...…
-
MyBatis的基本使用
MyBatis MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。 每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实...…
-
SpringMVC的基本使用
SpringMVC介绍 SpringMVC是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。什么是MVCSpringMVC是一个基于MVC的web框架(MVC是指,C控制层,M模块层,V显示层这样的设计理念)。 最上面的一层,是直接面向最终用户的”视图层”(View)。它是提供给用户的操作界面,是程序的外壳。 最底下的一层,是核心的”数据层”(Model),也就是程序需要操作的数据或信息。 中间的一层,就是”控制层”(Controller)...…
-
Spring-AOP
SpringAOP简介 面向切面编程(Aspect Oriented Programming)提供了另一种角度来思考程序的结构,通过这种方式弥补面向对象编程(Object Oriented Programming)的不足。我们可以通过AOP来实现日志监听,事务管理,权限控制等等。配置文件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/be...…
-
Spring的注解使用
Spring注解传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低。 在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率。 为了解决这两个问题,Spring引入了注解,通过”@XXX”的方式,让注解与Ja...…
-
Spring 控制反转(ioc)
layout: posttitle: “Spring-控制反转(IOC)”date: 2020-03-23 description: “Spring-控制反转(IOC)”tag: springSpring框架概述 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的...…
-
JDBC的简单使用
JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。访问MySQL数据库需要用到第三方的jar包(mysql-connector-java-5.1.6.jar)。 JDBC的使用比较简单。public class Demo { public static void main(String[] args) throws Exception{ //加载驱动 该方法并没有返回值,只是使用反射将...…
-
MySQL的数据库及表操作
MySQL的执行顺序from - on - join - where - group by - having - select - distinct - union - order by数据库操作 要对数据库进行操作,首先需要进入数据库控制台。在终端中数据mysql -u root -p 回车(需安装数据库),然后输入密码进入数据库控制台(没有密码会直接进入)。android@c1624:~$ mysql -u root -pEnter password: Welcome to the ...…
-
MySQL中的数据类型
MySQL MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。本文内容大量参考 https://www.runoob.com/mysql/mysql-data-types.htmlMySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型MySQL支持所有标准SQL数值数据类型。这些类型包...…
-
Java代理模式
代理模式 代理(Proxy)是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能.这就符合了设计模式的开闭原则,在不修改原有代码的情况下,对功能进行拓展。 代理模式分为两种:静态代理和动态代理。动态代理又分为:JDK代理和CGLIB代理。静态代理 在使用静态代理时,被代理对象与代理对象需要一起实现相同的接口或者是继承相同父类,因此要定义一个接口或抽象类. 原理其实比较简单...…
-
Java程序发送邮件
最近在写用户注册功能的时候,需要使用邮箱来绑定用户。这就需要发送验证码给用户邮箱来验证,所以想学习一下Java程序发送邮件。 如果想让邮箱支持客户端发送邮件,则需要开启自己邮箱的POP3/SMTP服务和授权码(该授权码在程序中需要使用)。 此处以我的网易邮箱为例: 使用Java程序发送邮件,需要使用到两个jar包:mail.jar、activation.jar。需要的jar包可以去mvnrepository.com/获取,我创建的是maven项目,所以直接在pom文件...…
-
浅谈字符串操作类
String类简介: String类是Java基本数据类型 char 的包装类,String不是Java基本数据类型。 String 类代表字符串,它的内部是使用了 char[] (被final修饰)数组实现的。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例来实现。字符串是常量;它们的值在创建之后不能改变(不能改变是指不能给一个字符串常量重新赋值,如 “a” = “b” 会出现编译时错误)。字符串缓冲区(StringBuffer、StringBuilder)...…
-
Java运算符
Java运算符运算符优先级 所有的数学运算都认为是从左向右运算的,Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。 乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置而不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。 一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻...…
-
Java多线程
线程和进程的区别总结: 进程是一段正在执行的程序,是资源分配的基本单元,而线程是CPU调度的基本单元。 进程间相互独立、不能共享资源,一个进程至少有一个线程,同一进程的各线程共享整个进程的资源(寄存器、堆栈、上下文)。 线程的创建和切换开销比进程小。public class Thread extends Object implements Runnable 线程是程序中执行的线程。 Java虚拟机允许应用程序同时执行多个执行线程。 每个线程都有优先权。 具有较高优先级的线程优...…
-
Java中的this关键字
今天在学习多线程的时候遇到了一个问题:使用同步锁执行count++时,锁对象为this,执行结果却还是有重复。代码如下:public class MethodTest2 { private static int count = 0; public static void main(String[] args) { //创建Thread对象并重写run方法 new Thread() { @Override public void run() { while(cou...…
-
Java反射
Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。 通过类的全路径名获取Class对象。返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于: Class.forName(className, true, currentLoader);其中 currentLoader 表示此类的定义类加载器。 拿到该类...…