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適合做微服務框架表現得最直接的一點了吧。