springboot入門

0.前言:

SpringBoot是Spring社區發佈的一個開源項目,在幫助開發者快速並且更簡單的構建項目。它使用習慣優於配置的理念讓你的項目快速運行起來,使用Spring Boot很容易創建一個獨立運行(運行jar,內置Servlet容器,Tomcat、jetty)、準生產級別的基於Spring框架的項目,使用SpringBoot框架,你可以不用或者只需要很少的配置文件。

1. Spring Boot概述

目標:瞭解Spring Boot是什麼,有什麼作用

小結

Spring Boot是一個便捷搭建 基於spring工程的腳手架;作用是幫助開發人員快速搭建大型的spring 項目。簡化工程的配置,依賴管理;實現開發人員把時間都集中在業務開發上。

2. Spring Boot入門

目標:能夠使用Spring Boot搭建項目

分析

需求:可以在瀏覽器中訪問http://localhost:8080/hello輸出一串字符

實現步驟:

  1. 創建工程;
  2. 添加依賴(啓動器依賴,spring-boot-starter-web);
  3. 創建啓動類;
  4. 創建處理器Controller;
  5. 測試

小結

Spring Boot工程可以通過添加啓動器依賴和創建啓動引導類實現快速創建web工程。

spring-boot-starter-web默認的應用服務器端口是8080

3. Java代碼方式配置

目標:可以使用@Value獲取配置文件配置項並結合@Bean註冊組件到Spring

分析

需求:使用Java代碼配置數據庫連接池,並可以在處理器中注入並使用

步驟:

  1. 添加依賴;
  2. 創建數據庫;
  3. 創建數據庫連接參數的配置文件jdbc.properties;
  4. 創建配置類;
  5. 改造處理器類注入數據源並使用

小結

package com.itheima.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {

    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}

4. Spring Boot屬性注入方式

目標:能夠使用@ConfigurationProperties實現Spring Boot配置文件配置項讀取和應用

分析

需求:將配置文件中的配置項讀取到一個對象中;

實現:可以使用Spring Boot提供的註解@ConfigurationProperties,該註解可以將Spring Boot的配置文件(默認必須爲application.properties或application.yml)中的配置項讀取到一個對象中。

實現步驟:

  1. 創建配置項類JdbcProperties類,在該類名上面添加@ConfigurationProperties;
  2. 將jdbc.properties修改名稱爲application.properties;
  3. 將JdbcProperties對象注入到JdbcConfig;
  4. 測試

小結

  • 使用@ConfigurationProperties編寫配置項類將配置文件中的配置項設置到對象中
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {

    private String url;
    private String driverClassName;
    private String username;
    private String password;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

  • 使用@ConfigurationProperties在方法上面使用
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
        return new DruidDataSource();
    }

5. 多個yml文件配置

目標:可以將多個yml文件在application.yml文件中配置激活

分析

yaml與properties配置文件除了展示形式不相同以外,其它功能和作用都是一樣的;在項目中原路的讀取方式不需要改變。

1)yml配置文件的特徵:

  1. 樹狀層級結構展示配置項;
  2. 配置項之間如果有關係的話需要分行空兩格;
  3. 配置項如果有值的話,那麼需要在 :之後空一格再寫配置項值;

將application.properties配置文件修改爲application.yml的話:

jdbc:
  driverClassName: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1:3306/heima
  username: root
  password: root

key:
  abc: cba
  def:
    - g
    - h
    - j

2)多個yml配置文件;在spring boot中是被允許的。這些配置文件的名稱必須爲application-***.yml,並且這些配置文件必須要在application.yml配置文件中激活之後纔可以使用。

3)如果properties和yml配置文件同時存在在spring boot項目中;那麼這兩類配置文件都有效。在兩個配置文件中如果存在同名的配置項的話會以properties文件的爲主。

小結

在多個配置文件時,需要將這些文件在application.yml文件中進行激活:

#激活配置文件;需要指定其它的配置文件名稱
spring:
  profiles:
    active: abc,def

6. 自動配置原理

目標:瞭解Spring Boot項目的配置加載流程

小結

  • META-INF\spring.fatories文件中定義了很多自動配置類;可以根據在pom.xml文件中添加的 啓動器依賴自動配置組件
  • 通過如下流程可以去修改application配置文件,改變自動配置的組件默認參數

在這裏插入圖片描述

7. lombok應用

目標:使用lombok的註解實現pojo類的簡化

分析

使用Spring Boot整合SSM工程;需要使用到數據庫數據。

  • 將數據庫表數據導入到數據庫中(springboot_test);

  • 編寫數據庫表對應的實體類;一般情況下需要編寫get/set/toString等這些方法會耗時並且會讓實體類看起來比較臃腫。可以使用lombok插件對實體類進行簡化。

    lombok是一個插件工具類包;提供了一些註解@Data、@Getter等這些註解去簡化實體類中的構造方法、get/set等方法的編寫。

    1. 在IDEA中安裝lombok插件;
    2. 添加lombok對應的依賴到項目pom.xml文件;
    3. 改造實體類使用lombok註解

小結

在Bean上使用:
@Data :自動提供getter和setter、hashCode、equals、toString等方法
@Getter:自動提供getter方法
@Setter:自動提供setter方法
@Slf4j:自動在bean中提供log變量,其實用的是slf4j的日誌功能。

8. Spring Boot整合-SpringMVC端口和靜態資源

目標:可以修改tomcat的端口和訪問項目中的靜態資源

分析

  • 修改tomcat端口

    查詢**Properties,設置配置項(前綴+類變量名)到application配置文件中

  • 訪問項目中的靜態資源

    靜態資源放置的位置;放置靜態資源並訪問這些資源

小結

  • 修改項目tomcat端口:
#tomcat端口
server:
  port: 80
  • 在spring boot項目中靜態資源可以放置在如下目錄:
    在這裏插入圖片描述

9.Spring Boot整合-SpringMVC攔截器

目標:可以在Spring Boot項目中配置自定義SpringMVC攔截器

分析

  1. 編寫攔截器(實現HandlerInterceptor);
  2. 編寫配置類實現 WebMvcConfigurer,在該類中添加各種組件;
  3. 測試

小結

可以在spring boot項目中通過配置類添加各種組件;如果要添加攔截器的話:

package com.itheima.config;

import com.itheima.interceptor.MyInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    //註冊攔截器
    @Bean
    public MyInterceptor myInterceptor(){
        return new MyInterceptor();
    }

    //添加攔截器到spring mvc攔截器鏈
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor()).addPathPatterns("/*");
    }
}

10. Spring Boot整合-事務和連接池

目標:配置Spring Boot自帶默認的hikari數據庫連接池和使用@Transactional註解進行事務配置

分析

  • 事務配置

    1. 添加事務相關的啓動器依賴,mysql相關依賴;
    2. 編寫業務類UserService使用事務註解@Transactional
  • 數據庫連接池hikari配置

    只需要在application配置文件中指定數據庫相關參數

小結

  • 事務配置;只需要添加jdbc啓動器依賴
  • 數據庫連接池使用默認的hikari,在配置文件中配置如下:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/springboot_test
    username: root
    password: root

11. Spring Boot整合-Mybatis

目標:配置Mybatis在Spring Boot工程中的整合包,設置mybatis的實體類別名,輸出執行sql語句配置項

分析

  1. 添加啓動器依賴;
  2. 配置Mybatis:實體類別名包,日誌,映射文件等;
  3. 配置MapperScan

小結

  • 添加mybatis官方對於spring boot的一個啓動器

            <!--mybatis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.0.1</version>
            </dependency>
    
    
  • 配置mybatis

    mybatis:
      # 實體類別名包路徑
      type-aliases-package: com.itheima.pojo
      # 映射文件路徑
      # mapper-locations: classpath:mappers/*.xml
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
  • 設置啓動器類中的mapper掃描

在這裏插入圖片描述

12. Spring Boot整合-通用Mapper

目標:配置通用Mapper組件到Spring Boot項目中並使用Mapper接口

分析

通用Mapper:可以實現自動拼接sql語句;所有的mapper都不需要編寫任何方法也就是不用編寫sql語句。可以提高開發效率。

  1. 添加啓動器依賴;
  2. 改造UserMapper繼承Mapper;
  3. 修改啓動引導類Application中的Mapper掃描註解;
  4. 修改User實體類添加jpa註解;
  5. 改造UserService實現業務功能;

小結

在啓動引導類上面的mapper掃描註解 一定要修改爲 通用mapper的掃描註解

13. Spring Boot整合測試

目標:可以訪問處理器對應路徑將數據庫中的數據根據id查詢

分析

  1. 改造HelloController,注入UserService利用其方法實現查詢;
  2. 啓動項目進行測試 http://localhost/user/用戶id --> http://localhost/user/8

小結

修改了HelloController:

    @Autowired
    private UserService userService;

    /**
     * 根據用戶id查詢用戶
     * @param id 用戶id
     * @return 用戶
     */
    @GetMapping("/user/{id}")
    public User queryById(@PathVariable Long id){
        return userService.queryById(id);
    }

14. Spring Boot整合-Junit

目標:在Spring Boot項目中使用Junit進行單元測試UserService的方法

分析

  1. 添加啓動器依賴spring-boot-starter-test;
  2. 編寫測試類

小結

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void queryById() {
        User user = userService.queryById(8L);
        System.out.println("user = " + user);
    }

    @Test
    public void saveUser() {
        User user = new User();
        user.setUserName("test2");
        user.setName("test2");
        user.setAge(13);
        user.setPassword("123456");
        user.setSex(1);
        user.setCreated(new Date());
        userService.saveUser(user);
    }
}

在Spring Boot項目中如果編寫測試類則必須要在類上面添加@SpringBootTest

15. Spring Boot整合-redis

目標:在Spring Boot項目中使用Junit測試RedisTemplate的使用

分析

  1. 添加啓動器依賴;spring-boot-starter-data-redis
  2. 配置application.yml中修改redis的連接參數;(redis需要啓動)
  3. 編寫測試類應用RedisTemplate操作redis中的5種數據類型(string/hash/list/set/sorted set)

小結

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test(){
        //string 字符串
        //redisTemplate.opsForValue().set("str", "heima");
        redisTemplate.boundValueOps("str").set("heima");
        System.out.println("str = " + redisTemplate.opsForValue().get("str"));

        //hash 散列
        redisTemplate.boundHashOps("h_key").put("name", "heima");
        redisTemplate.boundHashOps("h_key").put("age", 13);
        //獲取所有域
        Set set = redisTemplate.boundHashOps("h_key").keys();
        System.out.println(" hash散列的所有域:" + set);
        //獲取所有值
        List list = redisTemplate.boundHashOps("h_key").values();
        System.out.println(" hash散列的所有域的值:" + list);

        //list 列表
        redisTemplate.boundListOps("l_key").leftPush("c");
        redisTemplate.boundListOps("l_key").leftPush("b");
        redisTemplate.boundListOps("l_key").leftPush("a");
        //獲取全部元素
        list = redisTemplate.boundListOps("l_key").range(0, -1);
        System.out.println(" list列表中的所有元素:" + list);

        // set 集合
        redisTemplate.boundSetOps("s_key").add("a", "b", "c");
        set = redisTemplate.boundSetOps("s_key").members();
        System.out.println(" set集合中的所有元素:" + set);

        // sorted set 有序集合
        redisTemplate.boundZSetOps("z_key").add("a", 30);
        redisTemplate.boundZSetOps("z_key").add("b", 20);
        redisTemplate.boundZSetOps("z_key").add("c", 10);
        set = redisTemplate.boundZSetOps("z_key").range(0, -1);
        System.out.println(" zset有序集合中的所有元素:" + set);
    }
}

16. Spring Boot項目部署

目標:將Spring Boot項目使用maven指令打成jar包並運行測試

分析

  1. 需要添加打包組件將項目中的資源、配置、依賴包打到一個jar包中;可以使用maven的package
  2. 部署:java -jar 包名

小結

  • 添加打包組件

        <build>
            <plugins>
               <!-- 打jar包時如果不配置該插件,打出來的jar包沒有清單文件 -->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
  • 部署運行

    java -jar 包名
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章