Spring Boot

maven打包时跳过测试

徘徊边缘 提交于 2021-02-02 18:41:08
方法一:修改pom.xml文件 <project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build> [...] </project> 方法二:在Terminal执行命令 mvn install -DskipTests 方法三:在Terminal执行命令 mvn install -Dmaven.test.skip=true 方法四:Spring boot项目使用 spring-boot-maven-plugin插件已经集成了maven-surefire-plugin插件,会自动运行 junit test ,只需要在pom.xml里增加如下配置: <properties> <!-- 跳过测试 --> <skipTests>true</skipTests> </properties> 来源: oschina 链接: https://my.oschina.net

Java 中的 jar ,天天见,可是你知道它的运行机制吗?

谁说胖子不能爱 提交于 2021-02-02 13:09:11
今天介绍两个大家每天都在用但是却很少去了解它的知识点:spi 和 jar 运行机制,废话不多说,开始正题。 spi spi 是 Java 提供的一套用来被第三方实现或者扩展的 API ,它可以用来启用框架扩展和替换组件。spi 机制是这样的:读取 META-INF/services/ 目录下的元信息,然后 ServiceLoader 根据信息加载对应的类,你可以在自己的代码中使用这个被加载的类。要使用 Java SPI,需要遵循如下约定: 当服务提供者提供了接口的一种具体实现后,在 jar 包的 META-INF/services 目录下创建一个以 “接口全限定名” 命名的文件,内容为实现类的全限定名; 接口实现类所在的 jar 包放在主程序的 classpath 中; 主程序通过 java.util.ServiceLoder 动态装载实现模块,它通过扫描 META-INF/services 目录下的配置文件找到实现类的全限定名,把类加载到 JVM ; SPI 的实现类必须携带一个不带参数的构造方法; 现在我们来简单的使用一下吧。 spi 使用示例 建一个 maven 项目,定义一个接口 ( com.test.SpiTest ),并实现该接口( com.test.SpiTestImpl );然后在 src/main/resources/ 下建立 /META-INF/services

如何准备Java初级和高级的技术面试

瘦欲@ 提交于 2021-02-02 06:14:09
作者: Java工程师-Distance 链接:https://my.oschina.net/u/3739863(点击阅读原文前去围观) 本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只有当反复确认能力不行才会下结论,相反,如果候选人给我的印象不错,我也会从多个角度来衡量,以免招进会说但不会干活的“大忽悠”。 其实倒也不是我故意要为难候选人,毕竟入职后就是同事,但面试官的职责使然,而且,如果资深的面试官一般也这样。 写到这里,恐怕会吓到一些想要面试的朋友,能力强和能力弱都会被多问,那怎么办? 这就是本文将要讲到的主题: 如何准备Java初级和高级的技术面试 。 一. 换位思考下,如果你面试官,你会怎么做 1. 只能通过简历和面试来衡量,别无他法。如果某位大牛确认能力很行,但面试时无法充分地自证能力,那对不起了,过不了,现实就这样。 2. 如果面试官由于能力不行,招进来一个大忽悠,那估计会被领导骂。而且再也不会被让面试了,给领导的印象就不好了。所以不能评主观印象,而是会有些客观标准,具体而言,就是从多个方面问些题目,答好答坏就看候选人的。 其实一些题目都差不多,但不同能力的面试官问问题的切入点和渐进程度会不同

JAVA兼职架构师

自古美人都是妖i 提交于 2021-02-02 06:04:49
在一些小企业或者公司人力不足的时候,经常会出现一个人干多个人的活。开发可能会干架构、测试、运维,一些小项目可能需要一个人完成。我把这些角色合并在一起称之为兼职架构师。 我用我的经历来说说兼职架构师的需要干的事吧。 1.首先,幸运的事情至少我还有一个产品经理,可以给出RoadMap,比如下: 单独项目的唯一好处是,产品经理会给你安排一个大致时间,可以把控一下时间和进度。你也不需要开会,因为就你一个人,不过看过《人月神话》的都知道,1+1有时并不能大于2。当然我们底层功能的版本有人C++的人来支持,这边不叙说了。 first,你拿到roadmap心中需要有个大致安排时间,技术选型,功能组织架构。尽量多思考,花多一点时间去想如何实现比较好,哪些重点功能,哪些列出来可以不需要首先完成的(可以自由安排优先级,一般周末很少需要加班,效率非常高) second,因为我们测试人少,基本一个月一个小版本(小版本自己测试),一个季度保持一个大版本(大版本有测试帮测)。没有运维,就要考虑到部署人员通俗易懂,一个脚本需要执行所有环境的安排(内网实体机,需要安装包带所有功能,jdk,tomcat,mysql等脚本安装),所以非常考验脚本功底。尽量多想、多测,你也不想实施人员半夜打你电话吧? at last,你需要geek最新技术,我重构的项目经历过struts2 到spring mvc

PageHelper分页插件的原理是什么

前提是你 提交于 2021-02-02 04:43:07
作者:祖大俊 原文: https: / /my.oschina.net/zudajun /blog/ 745232 PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美。 原本以为分页插件,应该是很简单的,然而PageHelper比我想象的要复杂许多,它做的很强大,也很彻底,强大到使用者可能并不需要这么多功能,彻底到一参可以两用。但是,我认为,作为分页插件,完成物理分页任务是根本,其它的很多智能并不是必要的,保持它够傻够憨,专业术语叫stupid,简单就是美。 我们将简单介绍PageHelper的基本使用和配置参数的含义,重点分析PageHelper作为Mybatis分页插件的实现原理。 1. PageHelper的maven依赖及插件配置 < dependency > < groupId > com.github.pagehelper </ groupId > < artifactId > pagehelper </ artifactId > < version > 4.1.6 </ version > </ dependency > PageHelper除了本身的jar包外,它还依赖了一个叫jsqlparser的jar包,使用时

Spring Boot 2.x 之构建Fat Jar和可执行Jar

故事扮演 提交于 2021-02-02 02:58:10
Spring Boot提供的Maven插件spring-boot-maven-plugin可以用来构建Fat Jar和可执行Jar。 1.Fat Jar Fat Jar需要使用 java -jar xxx.jar 运行。要求在POM中使用: 1 < build > 2 < plugins > 3 < plugin > 4 < groupId > org.springframework.boot </ groupId > 5 < artifactId > spring-boot-maven-plugin </ artifactId > 6 </ plugin > 7 </ plugins > 8 </ build > 此时构造出来的Fat Jar是没有可执行属性的。 2. 可执行Jar 相对于Fat Jar,可执行Jar多了可执行属性,可以通过 xxx.jar start 命令启动运行。 只要配置spring-boot-maven-plugin,启用可执行属性: 1 < build > 2 < plugins > 3 < plugin > 4 < groupId > org.springframework.boot </ groupId > 5 < artifactId > spring-boot-maven-plugin </ artifactId > 6 <

阿里微服务大牛奉命总结出500页Spring微服务架构笔记

纵然是瞬间 提交于 2021-02-02 02:53:18
微服务是一种架构风格和模式:将复杂系统拆解为协同工作的小型服务,以此构建大型业务服务。微服务是自治、自包含且可独立部署的服务。当今世界上的许多企业将微服务作为默认的架构标准来构建面向服务的大型企业级应用。 作为一种编程框架,Spring框架在开发者社区流行很多年了。使用SpringBoot不再需要重量级应用容器,并且它还支持部署轻量级无服务器应用。Spring Cloud结合了Netflix的许多OSS开源组件,提供了一个运行和管理功能型微服务架构的生态系统;还支持负载均衡、服务注册、服务监控和服务网关,等等。 然而,微服务也带来了一些挑战,例如服务的监控、管理、分发、扩容和发现等,尤其是当大规模部署微服务时。如果在采用微服务架构之前不解这个问题这个问题些常见的问题,通常会导致灾难性的后果。本书旨在构建一个与技术细节无关的微服务能力模型,该模型有助于应对各种常见的微服务挑战。 本书提供了实现大型响应式微服务的实用方法和指导原则,并通过示例全面讲解如何构建微服务。本书深入介绍了 Spring Boot、Spring Cloud、Docker、Mesos和Marathon,还会教授如何用Spring Boot部署自治服务使用使用无须使用用重量级应用服务器 ,并介 绍Spring Cloud框架 以及以及 项能以及以及如何使用Docker实现容器化 ,以及如何

springboot集成swagger2

半城伤御伤魂 提交于 2021-02-01 20:35:26
1. 关于Swagger Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 相信采用 Spring Boot 开发的小伙伴几乎是用来构建 RESTful API ,而文档自然是不可缺少的一部分,Swagger 的出现,既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时方便的修改文档说明。 另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API。 作用总结: 接口文档在线生成 方便功能测试 集成后的效果图如下: 2. 开始集成 2.1 添加依赖 在 pom.xml 中添加 swagger 依赖 <!-- Swagger API文档 --> < dependency > < groupId > io.springfox </ groupId > < artifactId > springfox-swagger-ui </ artifactId > < version > 2.7.0 </ version > </ dependency > < dependency > < groupId > io.springfox </ groupId > < artifactId > springfox-swagger2 </

Springboot集成Swagger2

主宰稳场 提交于 2021-02-01 20:34:57
swagger2 1、引入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> 2、Swagger配置 package com.zb.myswagger2; import com.google.common.collect.Lists; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox

在springboot工程中统一处理响应对象的时间格式

雨燕双飞 提交于 2021-02-01 18:53:00
一、背景 工程为springboot框架,现需要统一将服务端接口返回数据内的时间格式定为 "yyyyMMdd HH:mm:ss"。 二、方法一 在bean上面添加注解 @JsonFormat,指定数据格式,代码如下: @NoArgsConstructor @Data public class Article { /** * id : 1 * author : xxx * title : dddd * content : sss * createTime : ssss * reader : [{"name":"ss","age":11}] */ private int id; private String author; private String title; private String content; private String createTime; private List<ReaderBean> reader; @JsonFormat(pattern="yyyyMMdd HH:mm:ss") private Date date; @NoArgsConstructor @Data public static class ReaderBean { /** * name : ss * age : 11 */ private String name; private int