1. 程式人生 > >構建第一個 SpringBoot 工程

構建第一個 SpringBoot 工程

SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程.

設計的目標

  • 為所有使用 Spring 的開發者提供一個更簡單,快速的入門體驗
  • 提供一些常見的功能、如監控、WEB容器,健康,安全等功能
  • 幹掉XML,遵循規範,開箱即用

專案搭建

建立專案的時候使用Spring Initializr,建立的專案結構如下

- src
    -main
        -java
            -package
                #啟動類
                -SpringbootApplication    
        -resouces
            #存放靜態資源如 js/css/images 等
            - statics
            #存放 html 模板檔案
            - templates
            #主要的配置檔案,SpringBoot啟動時候會自動載入application.yml/application.properties        
            - application.yml
    #測試檔案存放目錄        
    -test
 # pom.xml 檔案是Maven構建的基礎,裡面包含了我們所依賴JAR和Plugin的資訊
- pom

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> <name>spring-boot-web</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId
> <version>2.0.1.RELEASE</version> <relativePath/> </parent> <groupId>com.winner</groupId> <artifactId>spring-boot-web</artifactId> <version>1.0</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--預設內嵌Tomcat容器,可以根據需要進行替換--> <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.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project>

主函式入口

一個專案中切記不要出現多個main函式,否在在打包的時候spring-boot-maven-plugin將找不到主函式!

package com.winner;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

import java.util.Arrays;

/**
 * 主函式啟動類
 * @author winner_0715
 * @date 2018/11/28
 */
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        System.out.println(" springApplication run !");
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        // 目的是
        return args -> {
            System.out.println("SpringBoot預設為我們提供的Bean:");
            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            Arrays.stream(beanNames).forEach(System.out::println);
        };
    }
}

編寫我們的Controller

package com.winner.web;

import com.winner.domain.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author winner_0715
 * @description  HelloController
 * @date 2018/11/28
 */
@RestController
public class HelloController {

    @RequestMapping("/hello/string")
    public String helloString(){
        return "hello world";
    }

    /**
     * 因為使用了@RestController
     * 所以不需要加@ResponseBody註解
     * @[email protected][email protected]
     * @return
     */
    @RequestMapping("/hello/model")
    public User helloModel(){
        return new User.Builder()
                .userName("name")
                .email("email")
                .build();
    }
}

認識Spring Boot主配置檔案

application.properties

從啟動日誌中可以發現,SpringBoot預設的埠是8080,如果埠被佔用我們可以通過修改配置檔案來解決!

Tomcat started on port(s): 8080 (http) with context path ''

修改預設的配置(還帶提示的,很給力,配置了熱部署的話修改配置檔案就會重啟生效)

# 修改預設的埠8080
server.port=8888
# 定義上下文路徑
server.servlet.context-path=/spring-boot-web

看下此時控制檯的輸出

Tomcat started on port(s): 8888 (http) with context path '/spring-boot-web'

這樣的話訪問就需要帶上專案名了!