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适合做微服务框架表现得最直接的一点了吧。