Web开发SpringBoot SpringMVC Spring的学习笔记(包含开发常用工具类)
开发框架学习笔记
- 一.Spring SpringMVC SpringBoot
- 三者的联系
- SpringMVC工作原理
- 二.SpringBoot的学习
- 2.1 注解
- 2.1.1 SpringBoot的核心注解
- 2.1.2 配置导入注解(简化Spring配置写XML的痛苦)
- @Configuration和@Bean(`人为`注册Spring 的 Bean)
- @Import(补)
- @ImportResource(补)
- @Autowired@Qualifier和 @Resource(name="name",type="type")(获取Bean)
- @Inject(用的少,补)
- 2.1.3业务层功能
- @Component
- @ResponseBody
- @Controller @ResonanceBody和@RestController
- @Service
- @Repository(补)
- @RequestMapping
- @Value
- @PathVariable
- @Profiles
- @ConfigurationProperties
- 2.1.4 全局异常处理(补)
- @ControllerAdvice
- @ExceptionHandler(Exception.class)
- 2.2 IOC和AOP
- IOC
- AOP
- MybatisPlus
- 三.手动实现一个简易版Spring框架(包含以前没有Spring时怎么发请求)
- 四.开发常用工具Lombok
- 4.0说在前面(如何快速使用Lombok)
- 4.1了解Lombok
- 4.2Lombok的作用一:减少代码冗余
- 4.3Lombok的作用二:方便打日志
- 4.4Lombok使用方法(各个注解作用)
- 4.5Lombok原理
- JsonUtil
- BeanUtil
- StringUtil
- 代码习惯
- 快捷方式
一.Spring SpringMVC SpringBoot
三者的联系
MVC是一种设计框架, 市面上也有很多其他的MVC web框架,但是SpringMVC是佼佼者
- 总结: springboot是spring的升级, springMVC是一种MVC框架(MVC框架的作用看下图)
SpringMVC工作原理
这里我的理解是handler可能是前端发ajax请求的那段代码?还是说是后端各种controller类和其RequestMapping(‘URL’)的一个集合?
- 总结
相关参考文档如下:
MVC思想及SpringMVC设计理念
Spring MVC+ Spring + Mybatis “三大框架”介绍
SpringMVC—Handler到底是个什么?及流程详解
二.SpringBoot的学习
2.1 注解
本文基于这篇博客加上一些我个人的理解, 有一个很全的思维导图可以点击这个链接获取
2.1.1 SpringBoot的核心注解
@SpringBootApplication
通常用在启动类上,申明让spring boot自动给程序进行必要的配置,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
- @SpringBootConfiguration(补)
组合了 @Configuration 注解,实现配置文件的功能。
- @EnableAutoConfiguration(补)
打开自动配置的功能,也可以关闭某个自动配置的选项。
如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class });
- @ComponentScan
Spring组件扫描功能,让spring Boot扫描到@Configuration
和一些@Component
(@Service, @Controller, @Repository都是基于@Component)标注的类并把它加入到程序上下文。
2.1.2 配置导入注解(简化Spring配置写XML的痛苦)
@Configuration和@Bean(人为
注册Spring 的 Bean)
为什么说是人为呢, 因为代码中有new的动作
- @Configuration: 等同于spring的XML配置文件,使用Java代码可以检查类型安全。指出该类是
Bean 配置的信息源
,相当于Spring的XML中的,一般加在主类上。 - 相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理;
为啥不直接将@Component或者基于@Component的@Service\@Controller\@Repository标注在该类上,直接交给SpringBoot管理呢?
:
因为许多第三方的库我们是没法直接去修改它的源代码的(即没法直接在第三方库的类上添加注解
), 当我们需要使用第三方库又不想手动创建对象的时候(手动创建对象还要自己去释放)就可以:- 手写一个配置类加上@Configuration
- 配置类中声明一个方法返回第三方库的对象即可,
- 最后给这个方法加上@Bean注解
@Import(补)
用来导入其他配置类;
@ImportResource(补)
用来加载xml配置文件;
@Autowired@Qualifier和 @Resource(name=“name”,type=“type”)(获取Bean)
- @Autowired:自动导入依赖的bean,自动导入依赖的bean。
byType方式
(因此如果一个Service接口有两个实现类的时候,就必须使用@Resource了(支持byName)
)。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错; - @Resource:没有括号内内容的话,默认byName,与@Autowired干类似的事;
@Inject(用的少,补)
等价于默认的@Autowired,只是没有required属性;
2.1.3业务层功能
@Component
泛指组件,当组件不好归类的时候(因为@Service@Controller@Repository都有明确的业务场景),我们可以使用这个注解进行标注;
@ResponseBody
@ResponseBody这个注解@RestController自带了一般不用写, 现在都是前后端分离的, 肯定直接用@RestController
表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api
。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用;
@Controller @ResonanceBody和@RestController
- Controller: 用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping;
- @Controller 用于定义一个控制器类,它通常用于处理用户的HTTP请求,并返回相应的
视图(View)
。 @Controller类中的方法可以直接通过返回String跳转到JSP、HTML等模版页面。Spring会根据视图名解析出实际的视图,通常是一个HTML页面。
- 在方法上加
@ResponseBody注解
,也可以返回实体对象的JSON数据。 - 方法上的 @RequestMapping 或者其他映射注解(如 @GetMapping、@PostMapping 等)用于将特定的请求映射到相应的处理方法。
- @Controller 用于定义一个控制器类,它通常用于处理用户的HTTP请求,并返回相应的
- @RestController:用于标注控制层组件(如struts中的action),是@ResponseBody和@Controller的合集;
@RestController注解等价于@ResponseBody + @Controller。表示该控制器中的所有方法都返回数据而不是视图
。- 将每个方法的返回值直接作为 HTTP 响应的内容,而不经过视图解析器。@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。
- @RestContoller类中相当于所有方法都自带@ResponseBody,会自动将方法的返回值转换为JSON格式的响应体返回给客户端。但也可以通过其他注解(如 @ResponseBody)来改变返回的数据格式。
- @RestController如果想和@Controller一样跳转页面的话,可以使用ModelAndView进行封装。
@Service
一般用于修饰service层的组件;
@Repository(补)
用于标注数据访问组件,即DAO组件;
@RequestMapping
提供路由信息,负责URL到Controller中的具体函数的映射;
该注解包含以下6个属性:(常用value)
params:指定request中必须包含某些参数值是,才让该方法处理;
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求;
value:指定请求的实际地址,指定的地址可以是URI Template 模式;
method:指定请求的method类型, GET、POST、PUT、DELETE等;
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
@Value
注入 application.properties 或 application.yml 配置的属性的值;
@PathVariable
路径变量,参数与大括号里的名字一样要相同;
@Profiles
Spring Profiles 提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机;
@ConfigurationProperties
Spring Boot将尝试校验外部的配置,默认使用JSR-303(如果在classpath路径中)。你可以轻松的为你的@ConfigurationProperties 类添加JSR-303 javax.validation约束注解;
2.1.4 全局异常处理(补)
@ControllerAdvice
包含@Component,可以被扫描到,统一处理异常;
@ExceptionHandler(Exception.class)
2.2 IOC和AOP
IOC
IOC的实现方法通过三.手动实现一个简易版Spring框架
这一节中的推荐视频我总结一下我的看法(我比较菜, 就通俗易懂点):我看了视频后, 发现IOC就是一个对象的ContainerMap
这个Map填充的过程如下:
- Java通过包扫描(递归调用自己最终将该Spring项目下所有的类名得到一个集合)
- 遍历这个集合的类名, 通过反射判断其是否被
添加Bean相关的注解标注
, (添加Bean相关的注解有(Component\Configuration+Bean…)), 然后将被标注了这些类以Key-Value的形式放入container中
- key就是
注解中value的值
- value就是
这些类的对象的实例
- key就是
AOP
MybatisPlus
为什么这里可以直接用save呢,他怎么知道我查的哪个表?
这是因为继承了mybatisplus中的ServiceImpl类,并指定了当前类用到的mapper接口UserMapper和对应的entity实体类user
三.手动实现一个简易版Spring框架(包含以前没有Spring时怎么发请求)
本节内容是看这个视频学习的, 本节以前没有Spring时怎么发请求
这一部分内容略了, 大概就是通过MyServlet extend HttpServlet
+ 写XML注明每个路径对应哪个Servlet实现的
, 想了解的可以看上面那个视频
简易版Spring框架步骤:
- 加载配置文件, 得到第二步中包扫描的路径
- 包扫描所有的类(IO流+递归调用自己最终将该Spring项目下所有的类名存入一个集合中)
- 遍历这个集合的类名, 通过
反射
判断其是否被添加Bean相关的注解标注
, (添加Bean相关的注解有(Component\Configuration+Bean…)), 然后将被标注了这些类以Key-Value的形式放入container中
- key就是
注解中value的值
- value就是
这些类的对象的实例
- key就是
- 之前已经用一个MyDispatcherServlet拦截了所有的路径请求, 在这个大类中用一个handlerMapping存储下来
所有请求的路径
和对应的类的方法名
即- Key是请求的路径
- Value是该路径对应的类的方法名
之后通过HttpRequest对象拿到对应的请求路径(URL)将这个URL和handlerMapping中的Key进行遍历比对:- 比对失败:返回404
- 比对成功:取出对应的参数进行赋值, 然后
反射
调用对应Controller的方法
四.开发常用工具Lombok
4.0说在前面(如何快速使用Lombok)
- 最简单的办法在maven中加入如下依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><scope>provided</scope>
</dependency>
- 老版本的idea需要安装Lombok插件(否则写代码的时候会报错),并且打开设置中的
enable annotation processing
(否则idea不识别Lombok的注解)但是新版本(21开始吧)idea已经自带Lombok插件了;这里引出来一个问题:为什么要idea要装插件?
因为idea本质上是一个可视化的编辑器, java编译器会根据Lombok的注解修改语法树,最终结果是被注解标记的java类生成的字节码文件中会包含Lombok生成的代码, 但是我们写代码的时候出于源码阶段还没编译呢, idea当然识别不出来Lombok的注解生成一些get set方法了
4.1了解Lombok
官网解释
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing(香料,调味剂) up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
提取关键词:Java 库、自动插件、提高效率、再也不编写get、equals等方法、使用注解
4.2Lombok的作用一:减少代码冗余
使用Lombok前:即使idea提供了快捷键cmd + n手动快捷生成get/set/equals/hashCode/toString方法,但表多了后还是很麻烦
使用后效果:加注解,减少代码冗余
4.3Lombok的作用二:方便打日志
日志和传统打印操作相比的好处是
日志是可插拔的, 日后上线
的时候可以在配置文件中动态的开关,但是sout的内容需要手动
去一个个文件中寻找并删除
- 小技巧@Sl4j打日志的时候不仅仅可以直接打印,还可以用如下这种占位符的方法打印变量
/*** 实现log4j的符号{}打印*/@Testpublic void print2(){Person person1 = new Person("chen",123,"man");Person person2 = new Person("li",234,"women");System.out.println("=====================================================");//Person类用Lombok实现了toString()方法logger.info("This is a debug message,person1={},person2={}",person1,person2);System.out.println("=====================================================");}
4.4Lombok使用方法(各个注解作用)
- @Data:生成该类的get/set/equals/hashCode/toString方法
- @Sl4j:自动在该类中生成一个private Logger log = LoggerFactory.getLogger(this.getClass());即log对象, 我们可以通过log.info()\log.debug()\log.warning()…多种方式打日志
- @Log:支持Log4j、Slf4j,日志功能,
具体Log4j没用过, 后面来补
- @Accesors(chain = true):
平常给一个对象赋值的时候我们需要person1.setAge(6);person1.setName(‘张三’); 使用这个注解后直接person1.setAge(6).setName('张三');
进行链式编程; - @Builder:使用此注解进行对象的构建,函数式编程/链式编程,省去逐行字段set。
CarLombok build = CarLombok.builder().id(1).type(“string”).price(88.8).level(‘a’).build();
System.out.println(build.toString()); - @AllArgsConstructor:生成该类的全部参数的构造函数,
不能生成部分参数的构造函数
,如果想要生成部分参数的构造函数还是需要手动生成的;如果加上这个注解后相当于类中增加了一个全部参数的构造函数, 因此之前其他代码中用无参构造函数new的对象可能会报错, 我们还需要手动加上@NoArgsConstructor;即@AllArgsConstructor和@NoArgsConstructor一般一起使用
一般不用全部参数的构造方法, 我们习惯自己new完一个对象用set方法去赋值
- @NoArgsConstructor:生成无参构造函数
- @RequiredArgsConstructor:生成指定类型(final ,@NonNull)
- @Getter和@Setter
- 可以为单个成员变量设置get方法
- 可以为所有成员变量设置get、set方法 。同时可以为某个成员变量设置其他权限(默认public)、或设置取消get/set方法
- 无法为static设置get/set方法,只为final类型设置get方法
- @ToString等: 生成该类的get() set() tostring()方法
ToString只能加在类上,自动生成ToString方法,使用exclude排除多个字段,of必须包含哪些字段。
- @EqualsAndHashCode
生成equals方法、canEqual(判断是否属于Car类)、hashCode方法。也可以进行相等比较的排除,指定。
例如:@EqualsAndHashCode(exclude = {“字段1”,“字段2”})
- @NonNull
可以加在成员变量前,也可以加在方法参数前。用来指定某个字段不能为空 - val:类比JS中的val(弱引用类型),在编译阶段确定类型,简化操作
使用 val map = new HashMap<String, String>();
替换 Map<String, String> map = new HashMap<>(); - @Cleanup:对资源流进行清理
@Cleanup InputStream in = new FileInputStream(“filepath”);
@Cleanup OutputStream out = new FileOutputStream(“filepath2”);
4.5Lombok原理
本节内容涉及java编译过程大家可以去了解一下, 同时还有一些注解相关的API;
学习注解就一定要学习java的反射, 有关注解和反射的知识可以查看我的另一篇博客
- 没错, 上篇那个博客啥都没, hhh 待补!!!, 不过你可以查看下面这些内容
下面的内容都是从这个视频学的, 这个视频后半部分还讲解了Spring是如何通过注解实现对象的代理的, 但是我只是知道它执行的顺序, 还没有彻底搞懂反射, 等我补完反射就来补SpringBoot项目的启动流程
为什么说注解也是一个类呢?
Java规范:JSR 269(Java Specification Requests) 插件化注解处理API(Pluggable Annotation Processing API)
JDK6提供的特性,在 Javac编译期(SOURCE标识)利用注解,在字节码文件中生成get、set等方法
Java编译器执行过程:
查看编译后的字节码文件:
- 为什么说Lombok在源码阶段不生效, 他只是在java编译的时候在字节码文件中生成get\set方法
以@Data为例,我们查看它的源码发现:
JsonUtil
- Json <> Bean, 例如 将一个对象以string字符串的方式存储到redis的string中
BeanUtil
- Bean<>Map, 例如将一个对象以hashmap键值对的形式存储到redis的hash中
- JsonObject<>BeanUtil
StringUtil
- isNotBlank:判断一个String是否为空(空是指"“或” "这种)
代码习惯
- 所有常量均定义宏
写宏的时候 用下划线区分BEGIN_TIMESTAMP
- 凡是自动拆箱都可能导致空指针(比如返回的是Boolean, 但是这是个null, 那么没办法拆箱成boolean了)
public boolean{Boolean success = ...//return success;return Boolean.TRUE.equals(success);
}
- 少些嵌套
if(success) {try{}catch{}finally{} } .... 改成 if(!sucess) {... } try{}catch{}finally{}
- 注释
快捷方式
soutv:打印一个value
fori:循环
cmd + n插入构造函数, 重写方法,实现方法等
相关文章:
Web开发SpringBoot SpringMVC Spring的学习笔记(包含开发常用工具类)
开发框架学习笔记 一.Spring SpringMVC SpringBoot三者的联系SpringMVC工作原理 二.SpringBoot的学习2.1 注解2.1.1 SpringBoot的核心注解2.1.2 配置导入注解(简化Spring配置写XML的痛苦)Configuration和Bean(人为注册Spring 的 Bean)Import(补)ImportResource(补)AutowiredQua…...
微服务下的SpringSecurity认证端
从三板斧开始微服务下的SpringSecurity开始 一、引入组件包 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId> </dependency> 二、创建适配器 AuthorizationServerConfig…...
苹果电脑菜单栏应用管理软件Bartender 4 mac软件特点
Bartender mac是一款可以帮助用户更好地管理和组织菜单栏图标的 macOS 软件。它允许用户隐藏和重新排列菜单栏图标,从而减少混乱和杂乱。 Bartender mac软件特点 菜单栏图标隐藏:Bartender 允许用户隐藏菜单栏图标,只在需要时显示。这样可以…...
笙默考试管理系统-MyExamTest----codemirror(65)
笙默考试管理系统-MyExamTest----codemirror(65) 目录 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管理系统-MyExamTest----codemirror 四、 笙默考试管理系统-MyExamTest---…...
git在本地创建dev分支并和远程的dev分支关联起来
文章目录 git在本地创建dev分支并和远程的dev分支关联起来1. 使用git命令2. 使用idea2.1 先删除上面建的本地分支dev2.2 通过idea建dev分支并和远程dev分支关联 3. 查看本地分支和远程分支的关系 git在本地创建dev分支并和远程的dev分支关联起来 1. 使用git命令 git checkout…...
【C++】深入了解构造函数之初始化列表
目录 一、再谈构造函数 1、引入 1)构造函数体赋值 2)不同成员变量赋值 2、初始化列表 一、再谈构造函数 1、引入 1)构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值…...
差分--差分数组快速计算L到R值相加后的数组
目录 差分:思路代码: 原题链接 差分: 输入一个长度为 n 的整数序列。 接下来输入 m 个操作,每个操作包含三个整数 l,r,c ,表示将序列中 [l,r] 之间的每个数加上 c 。 请你输出进行完所有操作后的序列。 输入格式 第…...
《NLP入门到精通》栏目导读(01/2)
一、说明 栏目《NLP入门到精通》本着从简到难得台阶式学习过度。将自然语言处理得知识贯穿过来。本栏目得前导栏目是《深度学习》、《pytorch实践》,因此,读者需要一定得深度学习基础,才能过度到此栏目内容。 二、博客建设理念 本博客基地,将建成人工智能领域的参考资料库;…...
three.js实现电子围栏效果(纹理贴图)
three.js实现电子围栏效果(纹理贴图) 实现步骤 围栏的坐标坐标转换为几何体顶点,uv顶点坐标加载贴图,移动 图例 代码 <template><div class"app"><div ref"canvesRef" class"canvas-…...
DHSP和DNS
一、服务程序 1.1DHCP定义 DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组…...
Python冒号的解释
1. “没什么首次没有为第二个,跳了三个”。它得到的切片序列的每一个第三个项目。 扩展片是你想要的。新在Python 2.3 2. Python的序列切片地址可以写成[开始:结束:一步]和任何启动,停止或结束可以被丢弃。a[::3]是每第三个序列。…...
uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端鉴权拦截器实现
锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…...
固乔快递查询助手:批量、快速、全面的快递信息查询软件
在快递行业飞速发展的今天,如何高效、准确地掌握快递信息成为了很多人的需求。而固乔快递查询助手正是解决这一难题的利器。 固乔快递查询助手是一款专注于快递信息查询的软件,支持多家主流快递公司查询。用户只需输入单号,即可快速查询到实时…...
C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化
归并排序 归并算法采用非常经典的分治策略,每次把序列分成n/2的长度,将问题分解成小问题,由复杂变简单。 因为使用了递归算法,不能用于大数据的排序。 核心代码: using System; using System.Text; using System.Co…...
Linux的网络服务DHCP
一.了解DHCP服务 1.1 DHCP定义 DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服…...
【小沐学CAD】开源Assimp库导入三维模型(C++、Python)
文章目录 1、简介2、下载编译3、代码测试3.1 C3.2 pyassimp(Python) 结语 1、简介 https://github.com/assimp/assimp Open Asset Import Library 是一个库,用于将各种 3D 文件格式加载为共享的内存格式。它支持 40 多种用于导入的文件格式和…...
RT-Thread:SPI万能驱动 SFUD 驱动Flash W25Q64,通过 STM32CubeMX 配置 STM32 SPI 驱动
关键词:SFUD,FLASH,W25Q64,W25Q128,STM32F407 说明:RT-Thread 系统 使用 SPI万能驱动 SFUD 驱动 Flash W25Q64,通过 STM32CubeMX 配置 STM32 SPI 驱动。 提示:SFUD添加后的存储位置 1.打开RT-Thread Sett…...
Python学习笔记-使用Anaconda+VSCode配置开发环境
文章目录 概述一、安装Anaconda1.1 下载软件1.2 安装anaconda1.3 配置环境 二、配置虚拟环境2.1 使用conda创建一个新的虚拟环境2.1.1 使用search指令查看支持的python的版本:2.1.2 使用create创建指定版本的虚拟环境:2.1.3 使用env list查看虚拟环境列表…...
RabbitMQ的关键概念解析
RabbitMQ 是一个广泛使用的开源消息代理,它允许应用程序通过复杂的路由和存储机制来交换数据。理解 RabbitMQ 的核心概念对于有效地使用它至关重要。以下是 RabbitMQ 的一些关键概念及其工作流程: 关键概念 生产者(Producer) 生产…...
Python快速排序
快速排序是一种常用的排序算法,它通过递归地将数组分割成较小的子数组,然后对这些子数组进行排序,最终将它们合并成一个有序的数组。具体步骤如下: 1. 选择一个基准元素,通常是数组中的第一个元素。 2. 将数组分成两部…...
SpringBoot整合人大金仓数据库KingBase
1 去KingBase官网下载驱动jar包 2 将解压得到的所有jar包放置在libs目录下(没有就新建一个目录) 3 在pom文件添加相关依赖 <!--添加KingBase所需要的依赖--> <dependency><groupId>com.kingbase</groupId><artifactId>kin…...
Phoenix基本使用
1、Phoenix简介 1.1 Phoenix定义 Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表,插入数据和查询HBase数据。 1.2 Phoenix特点 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。性能…...
31-35.玩转Linux操作系统
玩转Linux操作系统 说明:本文中对Linux命令的讲解都是基于名为CentOS的Linux发行版本,我自己使用的是阿里云服务器,系统版本为CentOS Linux release 7.6.1810。不同的Linux发行版本在Shell命令和工具程序上会有一些差别,但是这些差…...
windows下载官方正版notepad++
一、前言 notepad是一款非常好用的编辑器,简洁、快速、高效。可是很多时候我们想去官网下载时,百度出来的都是一堆第三方下载地址,捆绑流氓软件,要么就是付费,作为一款优秀开源软件,我们必须要知道正确的下…...
Jmeter+ant+jenkins持续集成
一、环境准备 1、 jdk环境 要求JDK1.8以上,命令行输入:java -version,出现如下提示说明安装成功。 2、 Jmeter环境 下载Jmeter最新版本,解压即可,添加bin目录到环境变量。 3、 Ant环境 设置ant环境变量࿰…...
利用邮件发送附件来实现一键巡检,附件是通过调用zabbix api生成的word和Excel
HTML部分: <!DOCTYPE html> <html> <head><title>自动巡检</title><!-- 加入CSS样式 --> </head> <body><form id"inspectionForm"><label for"email">邮箱地址:</label>&…...
Linux 常用指令汇总
Linux 常用指令汇总 文章目录 Linux 常用指令汇总[toc]前言一、文件目录指令pwd 指令ls 指令cd 指令mkdir 指令rmdir 指令tree 指令cp 指令rm 指令mv 指令cat 指令more 指令less 指令head 指令tail 指令echo 指令> 指令>> 指令 二、时间日期指令date 指令cal 指令 三、…...
SpringBoot 注解超全详解(整合超详细版本)
使用注解的优势: 采用纯java代码,不在需要配置繁杂的xml文件 在配置中也可享受面向对象带来的好处 类型安全对重构可以提供良好的支持 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 1注解详解(配备了完善的释义)…...
Redis:原理速成+项目实战——Redis实战9(秒杀优化)
👨🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成项目实战——Redis实战8(基于Redis的分布式锁及优化) 📚订阅专栏&…...
【I2多语言】多语言快速上手
简介 官方API:http://www.inter-illusion.com/assets/I2LocalizationManual/I2LocalizationManual.html意义:更改游戏语言(多语言支持) 快速上手 插件安装: 直接拖拽进Unity即可 创建语言源(Creating a …...
品牌营销全案策划/广告优化师发展前景
进入设备:enable 进入特权模式配置:config terminal 设置telnet用户名和密码 enable service telnet-serverenable password 0 111111 username NAME password 111111line vty 0 4login local exit exit 退出config模式 write 写入修改 设置consol…...
杭州有哪些做网站的公司/南京市网站
以下是zen cart 首页程序的修改。根据各个文件修改不同的功能。 首页界面://include/templates/zccn/common/tpl_main_page.php首页主样式表://include/templates/zccn/css/schinese_stylesheet.css 首页左边栏目:/includes/templates/templa…...
宁波镇海区优秀全网seo优化/seo免费诊断联系方式
经过HelloX开发团队近半年的努力,在HelloX V1.78版本基础上,增加许多功能特性,并对V1.78版本的一些特性进行了进一步优化之后,正式形成HelloX V1.79测试版本。经相对充分的测试和验证之后,现正式发布。相关代码&#x…...
ghost wordpress比较/优化关键词排名提升
正则表达式(regex)的定义 正则表达式是一套特殊字符和格式组成的对字符串进行运算的表达式,用表达式对目标字符串从左到右依次匹配,达成检索、过滤、摘取的目的。 正则表达式的功能 判断用户输入内容是否符合要求。将用户输入的内容与预先定义的表达式比对,若不符合要求则提…...
苏州建站公司兴田德润i网址多少/大数据培训班出来能就业吗
(声明:本系列所用的模式都来自GOF23中,本系列并不是讲23种经典设计模式,而是如何去使用这些模式) 前面我们设计了员工的工资,奖金,福利系统。今天客户又来增加需求了:"我们需要统计公司,部门,或者小…...
政府类网站建设/爱站网官网查询域名
1、首先到oracle下载上下载jdk-7u5-linux-x64.tar.gz 2、将jdk-7u5-linux-x64.tar.gz拷贝到/usr/lib/jdk/目录下面,这里如果没有jdk文件夹,则创建该文件夹,命令: sudo mkdir jdk //创建文件夹jdk sudo cp -r ~/download/jdk-7u5-linux-x64.tar.gz /u…...