SpringBoot的幾個使用技巧


SpringBoot的幾個使用技巧

  首先提供幾個SpringBoot開發過程中常用的網站:

  1. Spring Boot官方文檔:http://docs.spring.io/spring-boot/docs
  2. SpringBoot項目初始化網站:https://start.spring.io/
  3. Maven依賴中心倉庫:http://search.maven.org/#search|ga|1|g%3A"com.tacitknowledge.flip"
  4. 國內真正常用的Maven倉庫:http://www.mvnrepository.com/
  5. 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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM