
Spring Boot
学习Spring Boot框架
Owen William
这个作者很懒,什么都没留下…
展开
-
7.4通过CRaSH管理Spring Boot和定义远程命令
7.4.1代码实现首先,我们需要添加CRaSH需要的依赖包: implementation 'org.jolokia:jolokia-core:+' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-remoteshell' ...原创 2020-11-22 16:44:30 · 422 阅读 · 0 评论 -
7.3通过JVM来监控Spring Boot
开启这个章节,你需要引入相应的包:compile("org.jolokia:jolokia-core:+")7.3.1代码实现在我们添加了Jolokia JMX依赖之后,我们需要开启我们的应用,现在开启jconsloe去看一下我们的应用监控信息。之后Jolokia JMX应用添加到类路径下,Spring Boot也能够通过HTTP API使用/jilokia访问到所有注册的MBeans.找到maxThreads设置我们的Tomcat HTTP端口8080连接,我们可以使用jConsole选择.原创 2020-11-22 16:43:10 · 456 阅读 · 0 评论 -
7.2开放指标
在前面的节点中,我们会了如何通过Spring Boot Actuators来获取我们应用中的指标。例如:/info,/health等。然而,这些的信息不足够的。我们也想看开放的session数,当前请求的数等。这一节点我们主要学习如何通过Spring Boot来添加我们自己想要查看的指标。7.2.1预告准备 为了更好地观察到我们的指标,我们需要借助开源项目,spring-boot-admin,位于:https://github.com/codecentric/spring-boot-admin...原创 2020-11-22 16:42:34 · 253 阅读 · 0 评论 -
7.1.2代码说明
Spring Boot Aactuator添加了大量的重要特性,这些特性可以让我们探测运行应用的状态。这个包中包含了大量的AutoConfigurations,这里配置了大量的参数访问可以让我们探测应用的状态。下面几个是我们比较使用的。/env 提供给我们有能力去询问关于所有环境的变量,这个应用通过环境接口来获取。对于我们想要知道大量配置属性和打断点来说是非常有用的。如果我们执行http://localhost:8080/env,我们将会看到大量不同的配置情况,使用类的路径资源:[tomcat.htt原创 2020-11-22 16:40:50 · 286 阅读 · 0 评论 -
7.监控应用和数据可视化 7.1通用健康状态指引器
在应用时,尤其是在分布式的系统中,如果系统出了问题,我们需要及时发现并解决。所以这就需要我们时时去监控应用的健康状态。7.1.1代码实现首先,我们需要引入Spring Boot Actuator的包到build.gradle文件中,如下: implementation 'org.springframework.boot:spring-boot-starter-actuator' 这个依赖使我们有能力通过节点来操作,如/env,/info,/metrics,/health...原创 2020-11-22 16:40:05 · 324 阅读 · 0 评论 -
6.8使用Consul和envconsul来配置外部环境变量
因为我们不想我们的应用去知道任何关于Consul,但是不得不明确连接到Consul。我们可以应用其它的工具去创建和打开资源通过Hashicorp,称易 envconsul连接到Consul的服务,使用额外的特殊配置key/value树,并且暴露它作为环境变量去开启我们的应用。为了使用envconsul,我们需要下载包,可以从这个地方下载:https://github.com/hashicorp/envconsul/releases6.8.1如何使用如果你没有添加值给my/config/va...原创 2020-10-25 20:18:43 · 935 阅读 · 0 评论 -
6.7开启Consul使用
现在我们做的所有配置都是连接到我们自己的本地数据。但是在大型企业中可不是这样,他们希望配置的信息可以在几千的应用或服务器上一同改变。这样的话,我们可以使用Consul来实现配置环境变量到分布式的数据储蓄中。6.7.1如何使用先去https://consul.io/downloads.html网址上下载Consul. 安装之后,我们可以执行consul –version,可以盾如下信息(版本不同显示不同): Consul v0.5.2Consul Protocol: 2 (Under..原创 2020-10-25 20:17:54 · 858 阅读 · 0 评论 -
6.6使用环境变量配置外部环境
6.6.1如何使用在前面的章节中,我们添加了配置属性名为my.config.value。让我们使用./gradlew clean bootRepackage打包,并且以MY_CONFIG_VALUE=”From EVN Config” ./build/libs/bookpub-0.0.1-SNAPSHO-exe.jar –spring.profiles.active=logger启动,你将会看到如下信息: 2020-04-21--- ication$$EnhancerBySpringCGLIB.原创 2020-10-25 20:17:06 · 387 阅读 · 0 评论 -
6.5使用外部环境的属性文件
在这一章节中,我们将要学习如何使用外部的属性文件给我们环境的特殊配置,这个配置文件可能来自于本地系统或互联上的。例如:互联网的URL、GitHub等。6.5.1如何使用首先添加一个@Bean方法到src/main/java/org/owen/bookpub目录下的BookPubApplication类中: @Bean public CommandLineRunner configValuePrinter( @Value("${my.config...原创 2020-10-25 20:16:28 · 226 阅读 · 0 评论 -
6.4Spring环境配置等级和优先级
在前面的章节中,我们已经学习了如何去用不同的方式去打包我们的应用和如何部署。下一步,我们需要配置我们的应用在可控制的范围还有就是环境特殊的配置参数。这一章节,我们基于前面的章节,添加支持不同配置的文件,同时测试如何使用适当的参数作为点位符在其它适应的声明中,并且如何添加我们的PropertySource应用。6.4.1如何使用我们需要在src/main/java/org/owen/bookpub目录下的BookPubApplication.java中加入@Profile注解。 @B...原创 2020-10-25 20:15:23 · 679 阅读 · 0 评论 -
6.3创建自己执行的二进制文件
这个章节,我们将使用已经存在的应用。我们学习如何修改默认的启动脚本,如,JVM启动参数 -D启动系统配置,JVM内存等。 这个章节要确保我们使用的Spring Boot版本是1.3以上。如果不是的话,请在build.gradle加入以下代码。(注意,我们自己创建的db-counter-starter/build.gradle也要添加) ext {springBootVersion = '1.3.0.BUILD-SNAPSHOT'} 我们需要声明application...原创 2020-10-25 20:14:22 · 1342 阅读 · 0 评论 -
6.2创建Docker镜像文件
6.2创建Docker镜像文件Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。这一章节, 我们将学习如何将我们的Spring Boot应用作为Docker的镜像,并且如何部署和运行它。6.2.1如何使用第一步,你需要在Docker官网上注册你的账号。官网是:https://hub.docker.com 一旦你有了账号之原创 2020-10-24 17:46:57 · 281 阅读 · 0 评论 -
6.打包和部署应用 6.1创建可执行的JAR的Spring Boot
6.1创建可执行的JAR的Spring Boot Spring Boot很好的是它打成的包是一个完整的应用,该应用中包含了依赖的包、资源等,让我们有能力去执行JAR。JAR文件创建之后,我们简单地使用java -jar <name>.jar的命令不可以启动应用。 这一章节,我们将继续前面的章节,让我们学习如何去创建Spring Boot Uber JAR.6.1.1代码实现让我们在项目的根目录下执行命令:gradle clean build 之后就会创建一个包,然后执行...原创 2020-10-24 17:43:26 · 294 阅读 · 0 评论 -
5.6使用Spock测试
另外一个重要的测试工具是Spock,这个是Peter Niederwieser使用Groory写的。使用Groovy基础框架,它很适合用于主要JVM基础语言测试,尤其是Java和Groovy本身。Groovy这种动态的语言很适合写出优雅的,高效的和表达性强的语言,不需要任何转变,就像Cucumber中使用一样。因为Spock的基础是JUnit,通过JUnit的@RunWith的工具整合,仅仅像Cucumber使用一样,它更容易提高我们传统的测试。在这一节中,我们需要学习如何在Spring中依赖注入和..原创 2020-10-11 16:12:01 · 851 阅读 · 0 评论 -
5.5使用Cucumber来测试
这一节,我们将继续前面的例子,然后不加Cucumber-JVM实现,这个将需要以java为基础的最初Ruby Cucumber框架的版本,并且创建一些测试来说明我们的应用和观点。5.5.1代码实现我们需要在build.gradle的文件中加入如下的包依赖: testCompile("info.cukes:cucumber-spring:1.2.2")testCompile("info.cukes:cucumber-java8:1.2.2")testCompile("info.cukes:c.原创 2020-10-11 16:10:27 · 1068 阅读 · 0 评论 -
5.4使用Mockito to mock来测试
接下来,我们将会创建一个特殊的Spring Boot配置类,这里我们将会声明和替换Spring Beans为了测试目的。当我们添加测试配置和执行它的时候,我们需要使用注释去告诉Spring Boot。在配置类中,我们将会使用Mockito去创建一些mock对象,这些对象在执行的时候将会通过Spring Boot来注入。5.4.1代码实现首先,我们需要创建一个特殊的注解为了紧跟后面的测试类,目的是加载相关信息给测试。为了达到这个目的,我们需要修改BookPubApplication的类如下内容:原创 2020-10-11 16:09:21 · 496 阅读 · 0 评论 -
5.3使用自定议的测试数据库文件
在前面的章节中,我们学习了如何使用配置文件的去创建表和初始化数据。在测试的时候,我们首先需要保项目的环境是启动的, 这样的话,我们才可以测试我们的数据。当应用连接数据库时,确保我们要使用的数据已经初始化了。在我们测试中,需要我们去刷新或更改数据。Sping让我们有能力去完成这项工作。5.3.1代码实现首先,我们在src/test目录下创建resources的目录。 这个目录下,我们创建一个新的文件test-data.sql在resources的文件下。文件的内容如下: IN...原创 2020-10-11 16:08:38 · 336 阅读 · 0 评论 -
5.2自动扫描及装配数据
在前面的章节中,我们手动的添加代码在StartupRunner的方法中,为了在启动项目时可以装配我们的数据。然而,这不 一个好的方法,更好的方式是将数据准备、改变和其它的配置独立出来。Sring 提供了更直接和容易的方式去解决这个问题。Spring 提供了一对方法让数据结构和数据插入到数据库。第一种方法是依赖于Hibernate,当我们创建了对象,并且加入注释@Entity时,Hibernate就会为我们创建表结构。同时,我们使用import.sql的文件去初始化数据。第二种方法是,我们使用旧的Sp..原创 2020-10-11 16:07:54 · 235 阅读 · 0 评论 -
5.应用测试 5.1测试Spring MVC的控制器
5.1测试Spring MVC的控制器在前面的章节中,我们创建了我们项目,但是我们应该怎样知道它的执行是我们想要的结果。更重要的是,我们应用怎么知道过了6个月或1年之后,这些应用还可以执行良好。这个问题的解决就是通过一系列的测试代码。在第四章节中,我们自定义了starter,现在我们需要将这些代码移除。现在我们需要创建基础测试去测试我们的应用,确保所有的控制器都会暴露出RESTful URLs的信息。这人测试就是我们所知道的Unit Testing,我们要确保所以测试相关的bean要初始化并...原创 2020-10-11 15:59:52 · 338 阅读 · 0 评论 -
4.4使用@Enable*注释去切换配置
多数情况下,Spring Boot都是自动去评估路径和探测配置的信息,然后快速获取简单应用。但是,有时候,我们想提供配置类,但是要求不需要Spring Boot去自动发现这个配置是否包含,也就是说,我们想自己判断这个配置的有用性。 这样的话,我们将修改注释而不是spring.factories的路径。4.4.1代码实现1.首先,我们需要注释掉count-starter/src/main/resource/spring.factories文件下的配置。 #org.springfram..原创 2020-08-07 17:42:46 · 181 阅读 · 0 评论 -
4.3配置自定义情况的Bean实例
4.3配置自定义情况的Bean实例在前面的例子中, 我们已经学习了如何去获取基础的Spring Boot Strater。在包含jar的应用路径下,DbCountRunner bean将会自动创建和添加到应用的上下文件中。在非常前的章节中,我们已经看到Spring Boot有能力去依赖一些情况来加载bean,例如特殊的路径下的类,已经存在的bean等。在这个章节,我们将会创建一个DbCountRunner,在bean实例存在时创建和加入到应用上下文中。4.3.1代码实现1.在DbCo...原创 2020-08-07 17:41:15 · 195 阅读 · 0 评论 -
4.2创建自定义Spring Boot自动配置Starter
4.2创建自定义Spring Boot自动配置Starter这个章节,我们将会创建我们自己的Spring Bootstarter,这个starter会包含一个自动依赖在我们的项目中。在第二章节中, 我们已经知道如何去创建数据库属性对象。让我们创建一个简单的starter,这个starter会创建另外一个CommandLineRunner,然后收集Repository的实例并且打印所有的实例。4.2.1代码实现1.首先我们创建一人新文件夹db-count-starter在项目根目录...原创 2020-08-07 17:39:52 · 149 阅读 · 0 评论 -
4.自定义的Spring Boot Starters
在先前的章节中我们做了很多的配置,并且在Spring Boot应用中还有许多的自动配置。现在,我们需要看一下这些自动装配的源码和写一些我们自定义的starters.自定义的starters对于公司的项目来说是非常有用的。这样我们就可以自定义配置系统,包和配置项去解决数据库,连接池,http客户端等我们自己需要的。这章节,我们将会深入研究starters,这样的话,我们就可以知道写一个自定义的starter需要哪些规则以达到我们创建自己starter的目的。4.1了解Spring Boot的自动装..原创 2020-08-07 17:36:51 · 140 阅读 · 0 评论 -
3.5用户访问使用HTTPS
另外一个普遍的情况是在应用中会有两份个HTTP端口连接,一个是HTTP,另外一个是HTTPS。3.5.1准备工作为了创建HTTPS的连接,我们需要创建在自己的电脑上创建证书,这个证书可以加密和解密在SSL的交流过程中。如果你是Unix或Mac,执行以下命令创建证书:$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA如果你是windows,那么,先进入jdk安装的路径,即JAVA_HOME的bin目录下,然后执行以下的命...原创 2020-06-11 20:26:48 · 551 阅读 · 0 评论 -
3.4选择性嵌入服务容器
虽然Spring Boot默认嵌入了Tomcat作为容器,但是并不代表我们只能使用Tomcat作为服务容器。Spring Boot提供我们即时即用的starts,所以我们也可以使用Jetty和Undertow。如果我们想要使用Jetty作为服务容器,我们老板娘添加Jetty的Starter。3.4.1代码实现Tomcat是Spring Boot默认的服务容器,所以我们现在需要将Tomcat移除掉。在build.gradle文件中加入下面代码: configurations {com...原创 2020-06-11 20:25:15 · 194 阅读 · 0 评论 -
3.3通过EmbeddedServletContainerCustomizer调用Tomcat
Spring Boot暴露了许多服务属性,这个属性可以用于配置一些事情,如PORT,SSL,其它的可以简单地配置在application.properties文件中。然而,如果我们想要做更加复杂的调用,Spring Boot提供给我们EmbeddedServletContainerCustomizer接口去声明我们的配置。通过使用server.sessiontimout设置超时时间,我们将使用EmbeddedServletContainerCustomizer去控制我们的应用。3.3.1代码实...原创 2020-06-11 20:23:50 · 5943 阅读 · 0 评论 -
3.2配置自定义的路径映射
我们想要通过http://localhost;8080/internal/application去暴露我们内部的application.properties文件. 我们应该如何去做,下面就来实现这个功能。3.2.1代码实现让我们在WebConfiguration中加入addResourceHandlers的方法。 @Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.add..原创 2020-06-11 20:22:25 · 617 阅读 · 0 评论 -
3.调整web框架行为 3.1配置路径匹配形式
3.1配置路径匹配形式当我们创建web应用时,它并不总是是一个默认的应用,映射配置适当可取的。我们想要去创建自己的RESTful URLs这里包含了点(.),Spring处理它是以分隔符处理的,例如点(.)在path.xml中,我们不想认为是一个斜线,像在/home/等。Spring提供了方法让我们去处理。在第二章节中,我们引入了WebConfiguration类,这个类继承了WebMvcConfigurerAdapter。这样的继承允许我们去重写方法,例如添加过滤器,转换器等。它也有方法让...原创 2020-06-11 20:21:09 · 364 阅读 · 0 评论 -
2.7配置自定义的Formatters
PropertyEditor由于缺乏安全性,所以Spring引入了Formatter接口取代PropertyEditor.Formatters的目的是提供相似的功能,但是完全是线程安全的,和焦点在大量String的对象类型,并转换一个对象到String.2.7.1代码实现首先,我们先创建一个新的包formatters在src/main/java/org/owen/bookpub包路径下。 接着,我们创建BookFormatter类并实现Formatter接口。 public class..原创 2020-06-11 20:19:18 · 1759 阅读 · 0 评论 -
2.6配置自定义PropertyEditors
在前面的章节中,我们学习了如何去转换来自HTTP的请求和响应数据。这里还有其它的转换,尤其是动态转换参数到多种对象,如String 到 Date或Integer.当我们在controller中声明映射方法中,Spring允许我们自由地去声明带有对象的标志。我们可以通过使用PropertyEditory接口。PropertyEditor是JDK的默认并且允许转换一个文本值到所给定的类型。它最初的目的是用于Swing/AWT GUI,而之后在Spring中更好地用于转换web的参数。Spring...原创 2020-06-11 20:16:45 · 267 阅读 · 0 评论 -
2.5配置自定义HttpMessageConverters
当我们创建RESTful的web数据服务时,我们声明了controllers,repositories和写了注释。但是,无论我们处理任何对象,我们最终都要将对象转换为HTTP的数据,以输出流输出。然而,在我们的应用场景之下,Spring Boot自动配置HttpMessageConverters去转换我们的实体类到JSON,这中间使用了Jackson包。最后以JSON格式的数据响应一个HTTP的请求。HttpMessageConverters的目的转换不同类型的对象到它们请求HTTP的输出流格式。一..原创 2020-06-11 20:15:20 · 1649 阅读 · 0 评论 -
2.4配置自定义拦截器
然而,Servlet Filters是Servlet AP的一部分,而在Spring中确什么都没有做,除了自动加入到过滤器中。Spring MVC提供我们另外一个web的请求封装——HandlerInterceptor.在官方文档中,HandlerInterceptor仅仅是一个Filter; 但是除了封装我们请求的外,一个拦截器可以在不同层面切断,例如在请求前获取控制,在请求之后放行,在视图展示前传递,和在每一次结束后请求会完全线束。它不会让我们改变任何请求,但是会让我们通过抛出异常或返回false来停止原创 2020-05-23 17:51:38 · 365 阅读 · 0 评论 -
2.3创建用户访问过滤器(安全性)
在我们的真实应用中,我们需要封装我们的服务请求,过滤掉不好的请求信息。在Spring Boot框架中会自动添加OrderedCharacterEncodingFilter和HiddenHttpMethodFilter, 但是我需要的往往更多。在Spring的框架家族中,如Spring Boot, Spring MVC, SpringWeb 和其它的,都提供了多个不同的服务过滤。我们只需要声明它们作为bean来使用即可。想象一下,我们现在有个应用运行在负载均衡的代理中,用户请求的IP需要是真实的IP而..原创 2020-05-23 17:50:14 · 448 阅读 · 0 评论 -
2.2创建Spring数据REST服务
在前面的例子中,我们使用BookResposity在REST控制器中,目的是通过RESTful API去暴露数据。然后,这样的声明是快捷的和容易的方式去调用数据,它要求我们创建控制器和声明映射的数据给请求操作。而这样的过程,Spring提供了相似的校报代码给我们使用,这个相似的应用就是在包spring-boot-starter-data-rest中。这个包中允许我们简单添加注释去响应接口,且Spring将会处理剩余的工作。2.2.1代码实现1.首先,我们在build.gradle中引入如下的包:原创 2020-05-23 17:49:18 · 165 阅读 · 0 评论 -
2.部署Web应用
2.1创建基础RESTful应用2.1.1代码实现接下来,笔者将更改我们之前的项目,让我们的项目提供web的API的接口供web端调用。具体的实现步骤如下:1.首先我们需要在build.gradle的文件中加入spring-boot-starter-web包的引用。如下所示: dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' ...原创 2020-05-23 17:48:11 · 234 阅读 · 0 评论 -
1.6定时任务
现在我们有这样的需求,那就是每10秒打印一个书的数量。要实现这个功能我们可以用Spring Boot为我们提供的方法来达到我们的需求。接下来我们修改StartupRunner的类。1.6.1代码实现1.首先,我们在BookPubApplication类加入如下的注释。 @SpringBootApplication@EnableSchedulingpublic class BookPubApplication {…} 2。接着,我们在StartupRunner类的run方..原创 2020-05-23 17:46:02 · 206 阅读 · 0 评论 -
1.5创建数据服务
1.5.1创建数据对象在前面的例子中,我们了解了如何去连接数据库和配置连接数据需要的信息。在这节中,我们将会创建几个数据对象并且实现CrudRepository的接口实现对数据的操作,如添加、删除等。我人将会创建这几个对象:Book、Author、Reviewer和Publisher.代码如下:1.创建Book对象,Book可以有多个Author和 Reviewer。当然,Reviewer也可以有多个Book.所以注意下面代码的@ManyToOne和@ManyToMany的使用。 @Ent原创 2020-05-23 17:44:38 · 171 阅读 · 0 评论 -
1.4数据库连接
前面笔者已经写过,只要我们配置了H2的驱动包,只要Spring Boot检测到有这个包就会自动去加载这个数据库。因此,在项目中我们就要以随心所欲地应用了。现在,我们来修改StartupRunner.java。 public class StartupRunner implements CommandLineRunner {protected final Log logger = LogFactory.getLog(getClass());@Autowiredprivate DataSourced.原创 2020-05-23 17:43:07 · 153 阅读 · 0 评论 -
1.3使用command-line runners
接下来我们创建一个类为StartupRunner,这个类需要实现接口CommandLineRunner接口,而这个接口只的一个方法需要重写,那就是public void run(String… args),这个方法只要应用启动时就会被调用。代码如下: import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.boot.CommandLi.原创 2020-05-23 17:42:19 · 220 阅读 · 1 评论 -
1.2创建简单的应用
创建Spring Boot的项目,你可以用Eclipse或通过Spring的官网来创建。读者可以通过http://start.spring.io这个连接去创建项目。下面是读者创建本次学习Spring Boot的项目,其中包括项目,包名等信息。同时,我们的项目是gradle的项目,所以需要勾选Gradle Project;还有项目使用H2数据库、JDBC、JPA,因此需要提前配置这些包的引用路径,在创建的右边可以添加。创建页面如下:创建好项目好,可以下载项目,然后导入到Eclipse中。1..原创 2020-05-23 17:41:12 · 246 阅读 · 0 评论