要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。
接着上篇看过的guide20,接着往下看。
guide21、Deploying to Cloud Foundry from STS
Cloud Foundry 是一个 2011 年推出的开源平台服务(PaaS),初衷是方便开发人员构建最早的容器化应用。Cloud Foundry 关注开发人员体验,为开发人员构建、部署和运行无状态云原生应用提供了划时代的平台。
STS:Spring Tool Suite,就是Spring官方基于Eclipse封装的一款开发工具, 主要是为了便于开发Spring应用程序。它与Eclipse相比较减少了很多原来的插件,主要是为了Spring程序服务的,当然开发其他的程序也是没有问题的。
主要是讲了用STS的spring boot dashboard,把一个简单的web应用程序,部署到cloud Foundry的操作步骤。
guide22、Creating CRUD UI with Vaadin
讲的是在JPA 存储库的基础上构建 Vaadin UI。实现一个具有完整 CRUD(创建、读取、更新和删除)功能的应用程序和一个使用自定义存储库方法的过滤示例。
Vaddin 是一个 Web 应用程序框架,用其开发的浏览器应用界面可以达到和桌面应用类似的效果,但和Flash,Silverlight 不同的是,Vaddin 应用无需再浏览器上安装任何插件。它是一个纯 Java 开发环境,开发人员无需深入了解 HTML,XML 或是 Javascipt。如果你曾经使用 Java 开发过 Swing,SWT 等应用,可以非常容易开始使用 Vaddin 开发 Web 应用。
就是加一个前端显示,根据源代码实现了下,可以在localhost:8080中打开页面:
guide23、Centralized Configuration
了解如何用cloud config去做一个配置服务器,然后spring应用程序可以通过它去访问git中的配置文件。
搭建了下:
1、设置配置文件的存储库。这里一般采用git文件存储库。初始化一个git仓库,上传文件a-bootiful-client.properties.
message = Hello world! Hello Spring!!
2、建立配置服务器,相当于配置文件存储库与应用程序的中介。
@EnableConfigServer
@SpringBootApplication
public class ConfigurationServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigurationServiceApplication.class, args);
}
}
@EnableConfigServer : 该注解用于开启 Spring Cloud Config 的配置服务功能。
配置文件设置下:
spring.application.name=config-server
server.port=23500
server.address=localhost
# git repo
spring.profiles.active=git
spring.cloud.config.server.git.uri=https://github.com/Zhuao9705/creative-personal-backend.git
spring.cloud.config.server.git.default-label=main
spring.cloud.config.server.git.username=Zhuao9705
spring.cloud.config.server.git.password=********
3、构建一个config client去从config server读取配置
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
@RefreshScope
@RestController
class MessageRestController {
@Value("${message:Hello default}")
private String message;
@RequestMapping("/message")
String getMessage() {
return this.message;
}
}
}
@RefreshScope注解:是Spring Cloud中的一个注解,当配置发生变更的时候可以在不重启应用的前提下完成bean中相关属性的刷新。
设置下配置文件:
spring.application.name=a-bootiful-client
spring.config.import=optional:configserver:http://localhost:23500/
management.endpoints.web.exposure.include=*
测试:
启动配置服务器和应用程序后,执行
可以直接从该接口获取配置文件的值。
如果修改了git中配置文件的值改为message = Hello world! ,可以执行actuator的端点,去刷新客户端并重新获取值。
$ curl localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"
然后再执行一下
参考文献:https://stevenocean.github.io/2020/12/31/spring-cloud-config-refresh.html
guide24、Accessing data with MySQL
主要讲的是怎么连接mysql,去进行操作数据。
主要的连接配置信息如下:
spring:
datasource:
url: jdbc:mysql://localhost:3306/zhuao?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useSSL=true&autoReconnect=true&serverTimezone=Asia/Shanghai
username: ****
password: ******
driver-class-name: com.mysql.cj.jdbc.Driver
guide25、Creating API Documentation with Restdocs
主要讲的是用spring rest docs为API生成文档。这里面涉及到了spring boot的单元测试。
Spring REST Docs 是一个为 Spring 项目生成 API 文档的框架,它通过在单元测试中额外添加 API
信息描述,从而自动生成对应的文档片段。
单元测试可以参考下:https://cloud.tencent.com/developer/article/1779117
Guide涉及注解:
@SpringBootTest: @SpringBootTest注解告诉SpringBoot去寻找一个主配置类,并使用它来启动Spring应用程序上下文。SpringBootTest加载完整的应用程序并注入所有可能的bean,因此速度会很慢。
在这种情况下,不需要创建 MockMvc bean,可以直接通过RestTemplate进行请求测试(或者使用TestRestTemplate)。
@RunWith(SpringRunner.class):让JUnit运行Spring的测试环境,获得Spring环境的上下文的支持
@SpringBootTest
@RunWith(SpringRunner.class)
public class XXXServiceTest {
@Resource
private XXXService XXXService;
@Test
public void conflictTime() {
}
}
@AutoConfigureMockMvc:用于自动配置MockMvc,配置后MockMvc类可以直接注入,相当于new MockMvc。
@AutoConfigureRestDocs(outputDir = “target/snippets”):开启了生成snippets文件,并指定了存放位置。
@WebMvcTest:@WebMvcTest注解主要用于controller层测试,只覆盖应用程序的controller层,HTTP请求和响应是Mock出来的,因此不会创建真正的连接。因此需要创建 MockMvc bean进行模拟接口调用。
@WebMvcTest(HomeController.class)
@AutoConfigureRestDocs(outputDir = "target/snippets")
public class WebLayerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void shouldReturnDefaultMessage() throws Exception {
this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(content().string(containsString("Hello, World")))
.andDo(document("home"));
}
}
执行测试方法后,生成的adoc文件可以在指定文件下看到。
对比下:
- Spring Boot的单元测试主要针对方法层面,可以测试Service层这类非对外暴露的接口的类中方法。
- Postman针对接口进行http测试,平时这个比较多,创建的测试接口可保存、分类。