导语
看到标题大家都疑惑,为什么叫做再入门呢?在之前的博客中也分享过相关的内容,但为了让Spring Cloud 微服务实战系列更加完整就再次编写一个入门的内容,也是为了这个系列的内容更加的完整,让跟多的读者喜欢这个系列的内容,之前的系列博主也在不断的更新中。
提示:本次代码全是由博主在markdown编写,并没通过编译器。希望使用者在使用的时候通过编译器进行操作。
入门介绍
首先,现在市面上很多的微服务的实现不外乎两种,中小型公司主要是使用Spring Cloud系列的多一些,而大公司往往使用阿里系技术的多一些。都是对标大厂商。下面就来简单的在此介绍一下Spring Boot,当然其中还有在之前的博客中没有提到过的内容,现在原创的内容很少了,希望大家能支持博主。多多关注博主。
Spring Boot 是有Pivotal 团队提供的全新的框架,其设计目的就是为了简化使用Spring开发的创建以及开发的过程。Spring Boot框架采用了一种特定的配置方式,让开发人员省去了很多的工作量,在快速开发领域有很大的帮助。
在传统的Spring项目中,我们需要配置各种的第三方库,以及XML中的很多的依赖,Spring Boot的出现完全打破了这种方式,Spring Boot提供了一种叫做场景启动器的东西,也就是在常用的配置中看到的Starter。这样可以轻松的解决包依赖的问题。同时还提供了自动配置的功能,省去了XML文件中配置的步骤。可以说在快速开发领域是一次质的飞跃。
读取配置文件
如何搭建一个Spring Boot项目,这个在之前的博客中已经说过了这里就不需要多说了,下面主要来看看,在之前的说的一个与我们的开发息息相关的内容,就是配置文件的读取。
在之前的Spring 项目开发中,主要是通过XML文件的方式进行整个Spring框架的配置,相关的业务属性也会放到属性配置文件中。然后通过一个Properties的类来进行配置文件的读取。在Spring Boot的中,在也不需要多复杂的方式进行配置文件的去读,Spring Boot的配置信息放在application.properties ,文件中,当然在很多的应用中也会看到 application.yml 其实两种配置方式的效果是一样的。配置文件的读取一共有如下的三种方式
Environment
通过Environment 的getProperty方法来获取想要的配置信息。
@RestController
public class HelloController{
@Autowired
private Environment env;
@GetMapping("/hello")
public String hello(){
String port = env.getProperty("server.port")
return port;
}
}
通过上面这种方式可以获取到在配置文件中配置端口信息,当然,也可以通过这种方式实现自定义配置的读取。
@Value
可以注入具体的配置信息
@RestController
public class HelloController{
@Value("server.port")
private String port;
@GetMapping("/hello")
public String hello(){
return port;
}
}
自定义配置类
这个是目前很多开发者很难去理解的一种方式,当然看过Spring Boot源码的人都懂其实在Spring Boot的自动配置注入的时候就是通过这种方式进行实现的。
@ConfigurationPorperties(profilx="nh.test")
@Component
public class MyConfig{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
读取配置的方式如下
@RestController
public class HelloController{
@Autowired
private MyConfig myConfig;
@GetMapping("/hello")
public String hello(){
return myConfig.getName();
}
}
在配置文件中实现如下的操作
nh.test=test
基于profile 的过环境配置
这块内容在之前的博客分享中也提到过这里做一个简单的回顾。
在平时的开发中,一个项目会涉及到多种环境的运行,而每种环境对应的是一种配置文件,那么怎么样很好的控制在不同的环境下激活不同的配置呢!在Spring Boot中提供了这样的一个配置 spring.profiles.active=dev 。这个也就是说激活的是在开发环境下的配置具体可以使用如下的方式来进行编写
配置 | 环境 |
---|---|
application-dev.yml | 开发环境 |
application-test.yml | 测试环境 |
application-prod.yml | 生产环境 |
在实际使用的过程中可以通过在application.yml基础配置文件中修改上面的spring.profiles.active方式来进行不同环境配置文件的激活操作。
热部署
在开发环境中,应为代码编写的不合适,我们经常性的会调整代码。这个时候需要查看代码修改之后的结果我们就需要整个项目重新启动。但是对于Spring Boot来说我们并不需要重复的启动项目。就可以完成这样的操作,这个时候Spring为我们提供的神器就排上用场了,spring-boot-tools在配置文件中添加如下的一个依赖
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>
在IDEA中进行一个如下的配置,将图中所示的地方进行选择
选择完成之后在顶部找到Help ,找到Find Action 进行如下的查找操作,进行修改并重启IDEA即可。
Actuator监控
&emps; Spring Boot 提供了一个用于监控和管理自身应用信息的模块,spring-boot-starter-actuator,这个模块使用起来相对比较简单。需要在项目中加入如下的操作即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
项目启动之后可以通过访问/actuator/health获取到应用的健康信息。当然还有很多其他的配置信息都可以进行监控。
默认情况下大部分端点都是不暴露出来的,这里就需要在我们的bootstrap.yml配置文件中进行配置如果没有也可以在默认的application.yml文件中进行配置。如下
management:
endpoints:
web:
exposure:
include: *
自定义监控
在很多的使用场景下,Spring Boot自己提供的内容并不是我们想要的内容这个时候就需要重新通过一定的方式来实现自定义的监控方式,同时也需要增加一些其他维度的信息,这个时候就需要将内容进行自定义。通过如下的方式进行自定义
@Component
public class UserHealthIndicator extends AbstractHealthIndicator{
@Override
protected void doHealthCheck(Builder builder) throws Exception{
builder.up().withDetail("status",true)
}
}
通过上面的方式来指定应用的健康与否而,withDetail,方法用来添加详细信息。
上面这种方式是在框架提供的端点中进行扩展,还有一种方式是我们可以提供一个全新的端点来进行自定义信息的访问,就是通过@Endpoint注解
@Endpoint(id="test")
@Component
public class UserEndpoint{
@ReadOperation
public List<Map<String,Object>> health(){
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> map = new HashMap();
map.put("user",1000);
map.put("username","nihui");
list.add(map);
return list;
}
}
通过上面这种方式我们可以访问/actuator/user接口来查看具体的信息。
总结
再次入门第一讲,介绍了一些SpringBoot相关的基础性的概念,在后续的分享中还将不断的深入研究其使用方式,当然本次分享的代码都是博主手写的,并没有通过编译器,希望读者在使用的时候通过编译器进行编写。