微服务架构体系丨Spring Boot原理与实践应用

Posted 美的金融科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务架构体系丨Spring Boot原理与实践应用相关的知识,希望对你有一定的参考价值。


Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。




什么是 spring boot?

Spring boot本身使用Spring框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系。随着Spring 3.0的发布,Spring IO团队逐渐开始摆脱XML配置文件,并且在开发过程中大量使用“约定优先配置”(convention over configuration)的思想来摆脱Spring框架中各类繁复纷杂的配置(即时是Java Config)。

Spring Boot正是在这样的一个背景下被抽象出来的开发框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。



为什么选择Spring Boot作为微服务的入门级微框架?

     1) Spring Boot使编码变简单

     2) Spring Boot使配置变简单

     3) Spring Boot使部署变简单

     4) Spring Boot使监控变简单


Spring boot 特性

微服务架构体系丨Spring Boot原理与实践应用

Spring boot 核心功能

微服务架构体系丨Spring Boot原理与实践应用

spring boot提供了一个统一的注解@SpringBootApplication。


@SpringBootApplication = (默认属性)@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan。

微服务架构体系丨Spring Boot原理与实践应用

@SpringBootConfiguration

当前类是一个配置类,就像xml配置文件,而现在是用java配置文件,效果是一样的。

微服务架构体系丨Spring Boot原理与实践应用

@EnableAutoConfiguration 自动配置bean

微服务架构体系丨Spring Boot原理与实践应用

注解@EnableAutoConfiguration之所以能自动自动配置bean,主要是其注解

@Import(AutoConfigurationImportSelector.class)中的类org.springframework.boot.autoconfigure

.AutoConfigurationImportSelector起主要作用,它主要寻找必要的一些配置类

AutoConfigurationImportSelector类有几个方法,但对于spring boot 能自动配置的关键方法是:


微服务架构体系丨Spring Boot原理与实践应用

List<String> configurations = SpringFactoriesLoader.loadFactoryNames(  

                getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()); 

主要功能是从文件

public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";

获取约定好的自动配置类。spring boot默认提供的自动配置类路径:  


spring-boot-autoconfigure/META-INF/spring.factories


微服务架构体系丨Spring Boot原理与实践应用


微服务架构体系丨Spring Boot原理与实践应用

spring boot 还可以自定义自动配置

1、先创建一个配置类,打成 jar 包部署在我们的本地或者私服上,以便其他项目依赖应用;

2、这个配置类需要在 src/main/resources/ META-INF/spring.factories 中配置信息;

3、另外一个项目中,配置 Maven 依赖。

例如:

1、spring.factories 文件新增配置:

# CUSTOM

org.springframework.boot.autoconfigure.EnableAutoConfiguration=

com.lianggzone.springboot.autoconfig.author.AuthorAutoConfiguration


2、功能打包与配置依赖

好了,我们已经实现了一个简单的自动配置功能。那么,我们需要将这个项目打成 jar 包部署在我们的本地或者私服上。然后,就可以用了。

我们在另外一个项目中,配置 Maven 依赖。

<dependency>

<groupId>com.lianggzone.demo</groupId>

<artifactId>springboot-action-autoconfig</artifactId>

<version>0.1</version>

</dependency>


spring boot实践应用

1、spring boot 搭建

2、spring boot 配置文件

3、spring boot 配置tomcat

4、spring boot 配置jdbc/jpa

5、spring boot 配置redis

6、spring boot 配置ecache

7、spring boot 配置freemarker

8、spring boot 单元测试


1、spring boot 搭建

1、本次实践选择的配置环境如下:

java 1.8+

maven 3.3+

spring-boot 1.5.7

eclipse 4.7


如下:

微服务架构体系丨Spring Boot原理与实践应用
微服务架构体系丨Spring Boot原理与实践应用
微服务架构体系丨Spring Boot原理与实践应用
微服务架构体系丨Spring Boot原理与实践应用
微服务架构体系丨Spring Boot原理与实践应用

maven依赖,根据项目的需要依赖 jar,如:tomcat,redis,jdbc等,而redis ,jdbc它们自己所依赖的基础jar包或者第三方包,都已经由spring boot  的starter 封装了,因此maven文件显得非常简洁。

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>


3、spring boot 启动

SpringBootFirstApplication 类加上注解@SpringBootApplication,可以通过main 方法,执行SpringApplication的静态run方法,启动spring boot 项目。

微服务架构体系丨Spring Boot原理与实践应用

SpringApplication 启动流程大体如下:



2、spring boot 配置文件

spring boot 配置文件有两种方式:application.properties 、application.yml,默认是application.properties。

.properties格式:

serverName=spring-boot-first

server.port=8080

.yml格式:

serverName:spring-boot-first

server:

    port:8080


Spring Boot 可以方便的将配置文件中的属性注入到一个配置对象中。

通过使用@ConfigurationProperties 或者@Value,来实现。如果使用@ConfigurationProperties,pom中需要加上依赖:


<!-- 支持 @ConfigurationProperties 注解 -->

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-configuration-processor</artifactId>

  <optional>true</optional>

</dependency>

例如:

application.properties配置:

test.value1=test-value1

test.value2=test-value2

代码:

微服务架构体系丨Spring Boot原理与实践应用
微服务架构体系丨Spring Boot原理与实践应用

输出结果:

hello world ----- value1 :test-value1 ;value2 :test-value2



3、spring boot 配置tomcat

*默认容器

spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / 通过需要用到的就是端口、上下文路径的修改,在spring boot中其修改方法及其简单;


server.port=8444

server.context-path=/spring-boot


运行日志:

2018-01-01 13:29:42.861  INFO 11688 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup

2018-01-01 13:29:43.031  INFO 11688 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8444 (http)


4、spring boot 配置jdbc

spring boot 设置jdbc ,pom 文件依赖spring-boot-starter-jdbc。


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

代码:

设置jdbc 主从配置


微服务架构体系丨Spring Boot原理与实践应用

配置文件的jdbc 属性

微服务架构体系丨Spring Boot原理与实践应用

jdbc在dao层的使用

微服务架构体系丨Spring Boot原理与实践应用


5、spring boot 配置redis

spring boot 设置redis,pom 文件依赖spring-boot-starter-redis。


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-redis</artifactId>

</dependency>

代码:

微服务架构体系丨Spring Boot原理与实践应用

 新建RedisConfig类,通过注解@Configuration,使之成为一个配置类,在项目启动的时候一起实例化。使用@ConfigurationProperties,引用配置文件中的redis属性,前缀为:prefix="spring.redis"。RedisConfig类里实现redis 属性引用、工厂的创建和模版的初始化。

在配置文件中的redis配置如下:

微服务架构体系丨Spring Boot原理与实践应用

redis 在代码中使用:

微服务架构体系丨Spring Boot原理与实践应用


6、spring boot 配置ecache

Spring boot 使用spring @Cacheable。@Cacheable :在执行后Spring Cache将缓存其返回结果。

@CacheEvict:在方法执行前或者执行后移除Spring Cache中的某些元素。

@Cacheable:在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就直接从缓存中获取结果进行返回,否则执行方法并返回结果存入指定的缓存中。


代码:


微服务架构体系丨Spring Boot原理与实践应用

运行结果比较:

微服务架构体系丨Spring Boot原理与实践应用

7、spring boot 配置前端模版-freemarker

spring boot 支持前端模版:Thymeleaf,Velocity ,Freemarker ,JSP等,默认的前端模版是thymeleaf,最新版本已经不再支持Velocity。


现配置freemarker为例:

代码:

pom添加:

<dependency>        <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-freemarker</artifactId>  

</dependency>

微服务架构体系丨Spring Boot原理与实践应用
微服务架构体系丨Spring Boot原理与实践应用

8、spring boot 配单元测试

spring boot 每次构建项目的时候,pom都会自动添加starter-test 的依赖。如下:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>


在测试类加上注解@SpringBootTest,选择方法进行测试的时候会启动spring boot 。

代码:



待续未完,期待下一期分享!

END


以上是关于微服务架构体系丨Spring Boot原理与实践应用的主要内容,如果未能解决你的问题,请参考以下文章

使用Spring Boot创建微服务

微服务架构实践 - 你只懂docker与spring boot就够了吗? - 简书

微服务架构实践 - 你只懂docker与spring boot就够了吗?

Spring Cloud 与微服务学习总结(16)—— 微服务架构统一安全认证设计与实践

Spring Cloud 与微服务学习总结(16)—— 微服务架构统一安全认证设计与实践

赠书福利丨微服务架构的基础框架选择:Spring Cloud还是Dubbo?