SpringBoot的幾個使用技巧
首先提供幾個SpringBoot開發過程中常用的網站:
- Spring Boot官方文檔:http://docs.spring.io/spring-boot/docs
- SpringBoot項目初始化網站:https://start.spring.io/
- Maven依賴中心倉庫:http://search.maven.org/#search|ga|1|g%3A"com.tacitknowledge.flip"
- 國內真正常用的Maven倉庫:http://www.mvnrepository.com/
- Spring Boot講的不錯的博客:http://blog.csdn.net/isea533/article/details/50281151
本文不是為了全面的講解基礎知識,希望可以幫助新手少走一點彎路。(當然lz也是新手一枚,共同進步吧😄)
第一章 簡單介紹
1.1 為什么使用Spring Boot
用於簡化Spring應用的初始搭建和開發過程。
第二章 一些小問題
首先貼出簡單地pom.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blog</groupId>
<artifactId>MyBlog</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MyBlog</name>
<description>我的博客項目</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 項目屬性 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatis.version>1.1.1</mybatis.version>
<mysql.version>5.1.38</mysql.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.1 為什么有些依賴不用標出版本
比如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
解答:由於父節點spring-boot-starter-parent包含了大量配置好的依賴管理,在自己項目添加這些依賴的時候不需要寫
詳細包含可見:
Spring Boot starter
簡單貼出一些,幫助自己記憶:
spring-boot-starter-web //對web開發的支持,包括內置的Tomcat和spring-webmvc

spring-boot-starter //Spring Boot starter的核心,包括自動配置的支持, logging 和 yml配置
spring-boot-starter-actuator //為應用添加了管理特性
spring-boot-starter-aop //面向切面編程的支持,包括spring-aop和AspectJ
spring-boot-starter-jdbc //jdbc數據庫的支持
spring-boot-starter-mail //對javax.mail的支持
spring-boot-starter-redis //對redis的支持,包括spring-redis
spring-boot-starter-security //對spring-security的支持
spring-boot-starter-test //常見的測試依賴,包括JUnit, Hamcrest, Mockito 和 spring-test 模塊
spring-boot-starter-thymeleaf //對渲染模板引擎的支持
2.2 每次更改都要重啟項目,怎么辦
可以考慮啟用熱部署
方法1 添加springloaded依賴
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
啟動項目→修改文件→右擊修改的文件→重新編譯,或者打開IDE的自動編譯功能
方法2 添加spring-boot-devtools依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
啟動項目→修改文件→右擊修改的文件→重新編譯,或者打開IDE的自動編譯功能
原理:spring-boot-devtools 是一個為開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。原理是在發現代碼有更改之后,重新啟動應用,但是速度比手動停止后再啟動還要更快,更快指的不是節省出來的手工操作的時間。其深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另一個ClassLoader加載會更改的類,稱為 restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,重新創建一個restart ClassLoader,由於需要加載的類相比較少,所以實現了較快的重啟時間(5秒以內)。
第三章 配置文件
在 spring boot 中,有兩種配置文件,一種是application.properties,另一種是application.yml,兩種都可以配置spring boot 項目中的一些變量的定義,參數的設置等。下面來說說兩者的區別。
區別
假設我們簡單地配置MySQL數據庫,application.properties如下所示:
spring.datasource.url=jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
application.yml如下所示:
spring:
datasource:
url: jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
可以看出來,yml 文件在寫的時候層次感強,而且少寫了代碼。所以現在很多人都使用yml配置文件。
❗️使用.yml時,屬性名的值和冒號中間必須有空格。同時,yml屬性文件不支持@PropertySource注解。
針對不同環境的配置方法:
詳細可看:Spring Boot 屬性配置和使用
針對開發(development)環境的配置文件:
application-dev.yml
#Windows開發環境下的配置文件
server:
port: 80
tomcat:
maxThreads: 10
minSpareThreads: 3
accesslog:
#注意這里G:/home/myblog/log/server_log也可以
directory: G:\home\myblog\log\server_log
pattern: combined
enabled: true
針對生產(production)環境下的配置文件:
application-prod.yml
#Centos生產環境下的配置文件
server:
port: 80
tomcat:
maxThreads: 10
minSpareThreads: 3
accesslog:
directory: /home/myblog/log/server_log
pattern: combined
enabled: true
如何定義使用哪種配置文件呢?
在主配置文件application.yml中配置如下:
spring:
profiles:
active: prod
**在定義配置文件時,可以使用占位符:
app.name=MyApp
app.description=${app.name} is a Spring Boot application
app.id=${random.int[1024,65536]}
如何在類中應用配置文件
優先級:
當前目錄子目錄的/config > 當前目錄 > classpath的/config包 > classpath的根目錄
即:越靠近的優先級越高
**指定配置文件
@PropertySource 和 SpringApplication.setDefaultProperties,比如:
SpringApplication application = new SpringApplication(Application.class);
Map<String, Object> defaultMap = new HashMap<String, Object>();
defaultMap.put("name", "Isea-Blog");
//還可以是Properties對象
application.setDefaultProperties(defaultMap);
application.run(args);
**應用屬性
@Value(“${xxx}”)和@ConfigurationProperties,比如:
配置文件:
my.name=Isea533
my.port=8080
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
對應對象:
@ConfigurationProperties(prefix="my")
public class Config {
private String name;
private Integer port;
private List<String> servers = new ArrayList<String>();
public String geName(){
return this.name;
}
public Integer gePort(){
return this.port;
}
public List<String> getServers() {
return this.servers;
}
}
Spring Boot 會自動將prefix="my"前綴為my的屬性注入進來。當然若不指定前綴,則將名字對應的注入,可能沖突。
比如我在文件中配置了一個
massage:
data:
name: qibaoyi
我在類中想要獲取他 需要這樣去寫:
@Value("${message.data.name}")
private String name;
