【SpringBoot】基础以及配置

SpringBoot

学习网站:How2java

SpringBoot:几乎不用配置的SSM(H)框架

​ 在学习SSM(H)的过程中,需要做大量的配置工作,其实很多配置行为本身只是手段,并不是目的。 基于这个考虑,把该简化的简化,该省略的省略,开发人员只用关心提供业务功能就行了,这便是 SpringBoot。

1、SpringBoot配置

1.1 Eclipse环境下

  1. 首先新建个 maven 项目:
    菜单 -> File -> New -> Other -> Maven -> Maven -> Maven Project -> New Maven Project

    SpringBoot本质上就是一个maven项目

在这里插入图片描述
因为我Ecilpse中已经存在一个springboot项目了,所以有报错误,你们应该是没有的。

  1. 配置pom.xml
    新建项目中已存在一个pom.xml配置文件了,我们用以下的pom.xml覆盖掉项目中的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.how2java</groupId>
 	<artifactId>springboot</artifactId>
  	<version>0.0.1-SNAPSHOT</version>
 	<name>springboot</name>
  	<description>springboot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>3.8.1</version>
              <scope>test</scope>
        </dependency>
    </dependencies>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. 创建Application.java文件

    其注解 @SpringBootApplication 表示这是一个SpringBoot应用,运行其主方法就会启动tomcat,默认端口是8080

    package com.how2java.springboot;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication
    public class Application {
          
          
    	public static void main(String[] args) {
          
          
        	SpringApplication.run(Application.class, args);
    	}
    }
    
  2. 创建HelloController.java
    这个类就是Spring MVC里的一个普通的控制器。

@RestController 是spring4里的新注解,是@ResponseBody和@Controller的缩写。

package com.how2java.springboot.web;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloController {
    
    
 
    @RequestMapping("/hello")
    public String hello() {
    
    
        return "Hello Spring Boot!";
    }
 
}
  1. 运行测试Application.java
    跟运行一般的Java程序一样运行Application.java,之后访问127.0.0.1:8080/hello
    HelloSpringBoot

疑问?为什么不用启动Tomcat,SpringBoot项目运行一个Java的main方法就可以启动了,它不是一个web程序吗?
解:因为这个 Application 类的主方法就把 tomcat 嵌入进去了,就不需要手动启动 tomcat 了。

2、SpringBoot部署

准备的SpringBoot项目:SpringBoot项目

2.1、Jar方式

  1. 编辑好相应的一个SpringBoot项目
  2. 在其项目根目录执行: mvn install ,会在其目录下生成一个jar文件
  3. 输入命令:java -jar target/springboot-0.0.1-SNAPSHOT.jar , 就可以启动该jar了
  4. 将该jar上传到服务器并运行,就可以达到部署的效果了

2.2、War方式

  1. 准备好一个SpringBoot项目

  2. 在Application修改为如下代码:

    • 新加一个@ServletComponentScan注解,并继承SpringBoorServletInitializer
    package com.how2java.springboot;
     
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import org.springframework.boot.web.support.SpringBootServletInitializer;
     
    @SpringBootApplication
    @ServletComponentScan
    public class Application extends SpringBootServletInitializer {
          
          
     
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
          
          
            return application.sources(Application.class);
        }
     
        public static void main(String[] args) {
          
          
            SpringApplication.run(Application.class, args);
        }
    }
    
  3. pom.xml代码修改:

    • 新加打包成war的声明:

      <packaging>war</packaging>
      
    • spring-boot-starter-tomcat修改为provided方式,避免与独立的tomcat容器产生冲突

3、配置jsp视图支持

  1. 在pom.xml中配置jsp支持

    <?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.how2java</groupId>
      <artifactId>springboot</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>springboot</name>
      <description>springboot</description>
      <packaging>war</packaging>
       
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
        </parent>
     
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                 
            </dependency>
            <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>3.8.1</version>
                  <scope>test</scope>
            </dependency>
            <!-- servlet依赖. -->
            <dependency>
                  <groupId>javax.servlet</groupId>
                  <artifactId>javax.servlet-api</artifactId>
                   
            </dependency>
                  <dependency>
                         <groupId>javax.servlet</groupId>
                         <artifactId>jstl</artifactId>
                  </dependency>
            <!-- tomcat的支持.-->
            <dependency>
                   <groupId>org.apache.tomcat.embed</groupId>
                   <artifactId>tomcat-embed-jasper</artifactId>
                    
            </dependency>    
        </dependencies>
     
        <properties>
            <java.version>1.8</java.version>
        </properties>
     
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
     
    </project>
    
  2. 在src/main/resoursces中增加application.properties文件,用于视图重定向

    spring.mvc.viewprefix=/WEB-INF/jsp/
    spring.mvc.suffix=.jsp
    
  3. 修改Controller相关类(以HelloController举例),注解改为@Controller。

    此时返回的“hello”便是根据application.properties的视图重定向,到WEB-INF/jsp目录下去寻找hello.jsp文件

    package com.how2java.springboot.web;
    import java.text.DateFormat;
    import java.util.Date;
     
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
      
    @Controller
    public class HelloController {
          
          
      
        @RequestMapping("/hello")
        public String hello(Model m) {
          
          
            m.addAttribute("now", DateFormat.getDateTimeInstance().format(new Date()));
            return "hello";
        }
    }
    
  4. 准备一个hello.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    Hi JSP. 现在时间是  ${now}
    

4、Springboot热部署

目前的Springboot,当发生了任何修改之后,必须关闭后再启动Application类才能够生效,显得略微麻烦。 Springboot提供了热部署的方式,当发现任何类发生了改变,马上通过JVM类加载的方式,加载最新的类到虚拟机中。 这样就不需要重新启动也能看到修改后的效果了

只需要在pom.xml中增加一个依赖和一个插件便可:

  • 依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
    </dependency>
    
  • 插件:

                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
    

5、SpringBoot错误处理

  1. 新增加一个类,用于捕捉Exception异常以及其子类。

    捕捉到之后,把异常信息,发出异常的地址放进ModelAndView里,然后跳转到 errorPage.jsp

    package com.how2java.springboot.exception;
     
    import javax.servlet.http.HttpServletRequest;
     
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.servlet.ModelAndView;
     
    @ControllerAdvice
    public class GlobalExceptionHandler {
          
          
        @ExceptionHandler(value = Exception.class)
        public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
          
          
            ModelAndView mav = new ModelAndView();
            mav.addObject("exception", e);
            mav.addObject("url", req.getRequestURL());
            mav.setViewName("errorPage");
            return mav;
        }
     
    }
    
  2. errorPage.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
     
    <div style="width:500px;border:1px solid lightgray;margin:200px auto;padding:80px">
     
    系统 出现了异常,异常原因是:
        ${exception}
        <br><br>
        出现异常的地址是:
        ${url}
        </div>
        
    

    如果你配置了热部署,修改之后不用手动重启,再次访问即可

6、SpringBoot端口和上下文路径

修改application.properties,修改访问的端口号和上下文路径

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.port=8888
server.servlet.context-path=/test

Springboot版本问题:在SpringBoot 2.1.2之前 上下文路径是server.context-path

7、SpringBoot配置切换

通过多配置文件实现多配置支持和切换,方便我们在本地用8080端口测试,而上线时候切换成80端口就可以了。

3个配置文件:

  • 核心配置文件:application.properties

    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    spring.profiles.active=pro
    
  • 开发环境用的配置文件:application-dev.properties

    server.port=8080
    server.context-path=/test
    
  • 生产环境用的配置文件:application-pro.properties

    server.port=80
    server.context-path=/
    

这样就可以通过application.properties里的spring.profiles.active 灵活地来切换使用哪个环境了

另外亦可以在部署环境下,通过指定不同的参数确保生产环境总是使用的希望的那一套配置:

  1. mvn install

  2. java -jar ……

    • java -jar target/springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=pro

    • java -jar target/springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

8、yml格式配置(选看)

spring:
	mvc:
		view:
			prefix:/WEB-INF/jsp/
			suffix:.jsp
			
server:
	port:8888
	servlet:
		context-path:/text

注意:

  1. 不同“等级” 用冒号隔开
  2. 次等级的前面是空格,不能使用制表符(tab)
  3. 冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着

properties配置和yml配置选一个,别折磨自己

9、导入SpringBoot项目

9.1、Eclipse导入

  1. 菜单->File->Import->Maven->Existing Maven Projects
  2. 选中你要导入的SpringBoot项目的目录,这个时候点一下 Refresh,下面就会跳出 pom.xml 文件
  3. 点 Finish

如果导入的是 maven 项目,所以在本地库没有 springboot 相关 jar 的前提下, eclipse 就会去进行下载。

一旦下载完成,就会展现为 如图所示的maven 风格的项目结构。

9.2、IDEA导入

  1. 菜单->File->New->Project From Existing Sources
  2. 选中你要导入的SpringBoot项目的目录,并选中 pom.xml
  3. 点击OK,然后后面就一路 Next 就行了

在IDEA中通过Open 也可以实现导入项目的(Idea牛逼!!)

猜你喜欢

转载自blog.csdn.net/weixin_40849588/article/details/95478787