SpringBoot为什么适合做微服务框架?

SpringBoot设计的目的是为了简化Spring应用初期工程的搭建以及开发过程。从一定的角度上说,SpringBoot并没有在Spring的基础上引入新的东西,只是在Spring和一些第三方的框架(比如:Mybatis、Redis、ActiveMQ...)的基础上进行了整合和封装,基于约定大于配置的思想,通过定义的注解替代了Spring应用中的.xml配置文件,使得项目的搭建、开发和部署变得简单。

微服务从业务层面对项目进行分割,注重项目粒度的划分,这也意味着一个项目将会被分成很多个子项目,比如:文件上传为一个项目,用户登录鉴权为一个项目,项目之间独立部署并通过协议进行数据交互。因此,利用SpringBoot做为微服务的开发框架,使得编码、配置、部署、监控变得简单。

SpringBoot项目工程的搭建

搭建完的目录结构


工程基于“约定大于配置”的思想进行搭建,Application.java是项目的启动文件,template文件夹存放项目有关的页面,项目安装resources->static->public的顺序查找文件。SpringBoot也并非完全没有配置,对于一些可能会被经常改动的信息(比如数据库信息),还是要存放在配置文件中

pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
             <source>1.8</source>
             <target>1.8</target>
             <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
    <!-- mvn clean package后,使用java -jar demo.jar启动项目 -->
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <mainClass>hello.Application</mainClass>
        </configuration>
    </plugin>
</plugins>

Application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

通过运行main方法便可启动SpringBoot项目,完成了一个SpringBoot工程的搭建,同时SpringBoot整合了很多第三方框架,方便开发者使用的引入。

SpringBoot的一些重要注解

@Configuration : 表示Application作为sprig配置文件存在 
@EnableAutoConfiguration: 启动spring boot内置的自动配置 
@ComponentScan : 扫描bean,路径为Application类所在package以及package下的子路径,

而上文使用的@SpringBootApplication则是这三个重要注解的一个整合。

SpringBoot集成Mybatis

修改pom.xml,引入相应的jar包,同时在application.properties中配置数据源信息以及扫码的xml和实体类便可实现SpringBoot与Mybatis的集成。

pom.xml

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>2.7.2</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

application.properties

mybatis.mapper-locations=classpath*:mapper/*Mapper.xml  
mybatis.type-aliases-package=cn.hsfeng.model

# jdbc_config
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_demo?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=admin

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dataSourceClassName=com.zaxxer.hikari.HikariDataSource
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.cachePrepStmts=true
spring.datasource.hikari.prepStmtCacheSize=250
spring.datasource.hikari.prepStmtCacheSqlLimit=2048

SpringBoot集成Redis

Spring Data Redis为我们封装了Redis客户端的各种操作,方便我们对数据的缓存进行操作。同样是先修改pom.xml,接着在application.properties中配置redis连接信息,同时需要通知Spring集成Redis,并启动缓存。

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

application.properties

# REDIS
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=30  
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1  
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=10  
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0  
# 连接超时时间(毫秒)
spring.redis.timeout=10000 

config/RedisConfig.java

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{

}

在代码中设置缓存的key则可使用@Cacheable(value="name", key="key"),Redis以hash的数据类型将查询的结果保存到数据库中。

其实不难发现,SpringBoot将一些第三方的框架整合得很好,开发人员只需要导入对应的jar包,再做一些简单的配置和声明,便可实现框架的集成,完成项目工程的搭建,我觉得这也是SpringBoot适合做微服务框架表现得最直接的一点了吧。

猜你喜欢

转载自blog.csdn.net/hsf15768615284/article/details/80956822