微服务架构体系丨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提供了一个统一的注解@SpringBootApplication。
@SpringBootApplication = (默认属性)@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan。
@SpringBootConfiguration
当前类是一个配置类,就像xml配置文件,而现在是用java配置文件,效果是一样的。
@EnableAutoConfiguration 自动配置bean
注解@EnableAutoConfiguration之所以能自动自动配置bean,主要是其注解
@Import(AutoConfigurationImportSelector.class)中的类org.springframework.boot.autoconfigure
.AutoConfigurationImportSelector起主要作用,它主要寻找必要的一些配置类
AutoConfigurationImportSelector类有几个方法,但对于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 还可以自定义自动配置
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
如下:
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 项目。
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
代码:
输出结果:
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 主从配置
配置文件的jdbc 属性
jdbc在dao层的使用
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>
代码:
新建RedisConfig类,通过注解@Configuration,使之成为一个配置类,在项目启动的时候一起实例化。使用@ConfigurationProperties,引用配置文件中的redis属性,前缀为:prefix="spring.redis"。RedisConfig类里实现redis 属性引用、工厂的创建和模版的初始化。
在配置文件中的redis配置如下:
redis 在代码中使用:
6、spring boot 配置ecache
Spring boot 使用spring @Cacheable。@Cacheable :在执行后Spring Cache将缓存其返回结果。
@CacheEvict:在方法执行前或者执行后移除Spring Cache中的某些元素。
@Cacheable:在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就直接从缓存中获取结果进行返回,否则执行方法并返回结果存入指定的缓存中。
代码:
运行结果比较:
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>
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原理与实践应用的主要内容,如果未能解决你的问题,请参考以下文章
微服务架构实践 - 你只懂docker与spring boot就够了吗? - 简书
微服务架构实践 - 你只懂docker与spring boot就够了吗?
Spring Cloud 与微服务学习总结(16)—— 微服务架构统一安全认证设计与实践