为什么是mongodb?继续之前的dailyReport项目,今天的任务是选择mongogdb作为持久化存储。关于nosql和rdbms的对比以及选择,我参考了不少资料,关键一点在于:nosql可以轻易扩展表的列,对于业务快速变化的应用场景非常适合;rdbms则需要安装关系型数据库模式对业务进行建模,适合业务场景已经成熟的系统。
在Spring Boot应用的健康监控一文中,我们通过Spring Boot Actuator对外暴露应用的监控信息,除了使用HTTP获取JSON格式 的数据之外,还可以通过JMX监控应用,Spring Boot也提供了对JMX监控的支持。JMX监控对外暴露的信息相同,不过是使用MBeans容器将应用数据封装管理。接下来我们看下如何利用JMX获取应用状态信息,以及如何使用Jolokia JMX库对外暴露MBeans的HTTP访问URL。
上一篇文章中了解了Spring Boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量、当前应用的并发数、延迟以及其他度量信息。这次我们了解如何利用Spring-boot-admin对应用信息进行可视化,如何添加度量信息。准备spring-boot-admin的Github地址在:https://github.
在之前的系列文章中我们学习了如何进行Spring Boot应用的功能开发,以及如何写单元测试、集成测试等,然而,在实际的软件开发中需要做的不仅如此:还包括对应用程序的监控和管理。正如飞行员不喜欢盲目飞行,程序员也需要实时看到自己的应用目前的运行情况。
现在的IT开发,DevOps渐渐获得技术管理人员支持、云计算从ECS转向Docker容器技术、微服务的概念和讨论也越来越热,以上这些研究方面,最终都聚焦于软件的打包、分发和部署上。[Twelve-Factor App]开发方法这一系列的博文主要讲述了一个现代的SaaS应用是如何被构建和部署的,其中一个关键的原则是:分离配置定义和应用程序。
Spring Boot应用的打包和部署Docker with Spring Boot
Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring Boot项目中使用该框架写优雅、高效以及DSL化的测试用例。Spock通过@RunWith注解与JUnit框架协同使用,另外,Spock也可以和Mockito(Spring Boot应用的测试——Mockito)协同使用。
前两篇文章的主要内容是:为了给执行测试,如何建立数据库表和导入初始数据。这里我们将学习如何利用Mockito框架和一些注解模拟(mock)Repository实例,从而使得测试用例不依赖外部的数据库服务。我们需要创建一个Spring Boot配置类,在该类中定义用于测试的Spring Bean;我们通过注解指示Spring Boot何时加载测试配置类以及何时执行该类中的代码。
在初始化数据库和导入数据一文中,我们探索了在Spring Boot项目中如何创建数据库的表结构,以及如何往数据库中填充初始数据。在程序开发过程中常常会在环境配置上浪费很多时间,例如在一个存在数据库组件的应用程序中,测试用例运行之前必须保证数据库中的表结构正确,并且已经填入初始数据。对于良好的测试用例,还需要保证数据库在执行用例前后状态不改变。
在Spring Boot应用的测试一文中,我们在StarterRunner类的run(...)方法中给数据库中添加一些初始数据。尽管通过编程方式添加初始数据比较快捷方便,但长期来看这并不是一个好办法——特别是当需要添加的数据量很大时。我们开发最好把数据库准备、数据库修改和数据库的配置与将要运行的程序代码分离,尽管这仅仅是为测试用例做准备。
Spring Boot可以和大部分流行的测试框架协同工作:通过Spring JUnit创建单元测试;生成测试数据初始化数据库用于测试;Spring Boot可以跟BDD(Behavier Driven Development)工具、Cucumber和Spock协同工作,对应用程序进行测试。进行软件开发的时候,我们会写很多代码,不过,再过六个月(甚至一年以上)你知道自己的代码怎么运作么?
Spring Boot应用的测试——Mockito初始化数据库和导入数据在测试中使用内存数据库利用Mockito模拟DB在Spring Boot项目中使用Spock框架
在Spring Boot:定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法:spring.factories:由Spring Boot触发探测classpath目录下的类,进行自动配置;@Enable:有时需要由starter的用户触发*查找自动配置文件的过程。How Do接着上篇文章的例子,首先将spring.factories中的内容注释掉#org.springframework.boot.autoconfigure.
在学习Spring Boot的过程中,接触最多的就是starter。可以认为starter是一种服务——使得使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动通过classpath路径下的类发现需要的Bean,并织入bean。
Spring Boot的自动配置给开发者带来了很大的便利,当开发人员在pom文件中添加starter依赖后,maven或者gradle会自动下载很多jar包到classpath中。当Spring Boot检测到特定类的存在,就会针对这个应用做一定的配置,自动创建和织入需要的spring bean到程序上下文中。
了解Spring Boot的自动配置Spring Boot:定制自己的starter配置是否初始化Bean的方法通过@Enable*注解触发Spring Boot配置
如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HTTPS两种协议。准备为了使用HTTPS连接器,需要生成一份Certificate keystore,用于加密和机密浏览器的SSL沟通。
Spring Boot工程的默认web容器是Tomcat,但是开发人员可以根据需要修改,例如使用Jetty或者Undertow,Spring Boot提供了对应的starters。How Do在pom文件中排除tomcat的starter<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <
通过在application.properties设置对应的key-value对,可以配置Spring Boot应用程序的很多特性,例如POST、SSL、MySQL等等。如果需要更加复杂的调优,则可以利用Spring Boot提供的EmbeddedServletContainerCustomizer接口通过编程方式和修改配置信息。尽管可以通过application.properties设置server.
在Spring Boot:定制URL匹配规则一文中我们展示了如何调整URL请求匹配到对应的控制器方法的规则。类似得,也可以控制应用程序对静态文件(前提是被打包进部署包)的处理。假设我们需要通过URLhttp://localhost:8080/internal/application.properties对外暴露当前程序的配置。
关注时代Java