【编程不良人】快速入门SpringBoot学习笔记01---SSM环境搭建回顾、SSM开发中存在的问题、SpringBoot引言、优势、约定、环境搭建、注解说明、配置文件拆分、项目创建的两种方式

1. SSM环境搭建回顾

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

  • spring

  • springmvc

  • mybatis

  • spring springmvc mybatis 简单功能 员工添加 查询 所有

  # 项目
  -  需求分析  概要设计(库表设计)   详细设计(验证库表正确性)  编码(环境搭建+业务代码)  测试  部署上线
  ​
  # 员工添加 查询所有功能  SSM
  - 库表   库: ssm   数据库:mysql  表: id name birthday salary
  drop database if exists ssm;
  create database if not exists ssm;
  use ssm;
  drop table if exists emp;
  create table if not exists emp(
      id int(11) not null primary key auto_increment,
      name varchar(40),
      birthday timestamp,
      salary double(10,2)
  )engine=innodb default charset=utf8mb4;
  ​
  # 编码 环境搭建新建Maven-webapp项目 ssm:spring  springmvc   一个团队开发 无缝整合
  - springmvc  spring  mybatis
  ​

1.1 pom.xml引入依赖

  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
  </dependency>
  ​
  <!--spring-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.3.6</version>
  </dependency>
  ​
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.3.6</version>
  </dependency>
  ​
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.3.6</version>
  </dependency>
  ​
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.6</version>
  </dependency>
  ​
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.3.6</version>
  </dependency>
  ​
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.3.6</version>
  </dependency>
  ​
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.3.6</version>
  </dependency>
  ​
  <!--  springmvc-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.6</version>
  </dependency>
  ​
  <!--druid-->
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.4</version>
  </dependency>
  ​
  <!--mysql-->
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
  </dependency>
  ​
  <!--mybatis-->
  <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
  </dependency>
  ​
  <!-- mybatis-spring-->
  <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.6</version>
  </dependency>
  ​
  <!--  jackson 转换json-->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.3</version>
  </dependency>
  ​
  <!-- aspectj aop切面 -->
  <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.5</version>
  </dependency>
  ​
  <!--aspectj-->
  <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.9.5</version>
  </dependency>

注意:spring相关依赖要保证版本号一致

1.2 编写spring.xml配置文件

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:context="http://www.springframework.org/schema/context"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx.xsd">
  ​
      <!--开启注解扫描-->
      <context:component-scan base-package="com.baizhi.service"/>
  ​
      <!--创建数据源-->
      <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
          <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
          <property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8"/>
          <property name="username" value="root"/>
          <property name="password" value="123456"/>
      </bean>
  ​
      <!--创建sqlSessionFactory-->
      <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
          <property name="dataSource" ref="dataSource"/>
          <!--mapper配置文件位置-->
          <property name="mapperLocations" value="classpath:com/baizhi/mapper/*.xml"/>
          <!--实体别名 类名或类名小写均可 -->
          <property name="typeAliasesPackage" value="com.baizhi.entity"/>
      </bean>
  ​
      <!--创建DAO-->
      <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
          <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
          <property name="basePackage" value="com.baizhi.dao"/>
      </bean>
  ​
      <!--创建事务管理器-->
      <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"/>
      </bean>
  ​
      <!--开启注解事务生效 @Transactional-->
      <tx:annotation-driven  transaction-manager="transactionManager"/>
  ​
  </beans>

1.3 开发实体类

  
  package com.baizhi.entity;
  ​
  import com.fasterxml.jackson.annotation.JsonFormat;
  ​
  import java.util.Date;
  ​
  public class Emp {
  ​
      private Integer id;
      private String name;
      @JsonFormat(pattern = "yyyy-MM-dd")//json格式日期转换,只对日期生效
      private Date birthday;
      private Double salary;
  ​
      public Emp() {
      }
  ​
      public Emp(Integer id, String name, Date birthday, Double salary) {
          this.id = id;
          this.name = name;
          this.birthday = birthday;
          this.salary = salary;
      }
  ​
      public Integer getId() {
          return id;
      }
  ​
      public void setId(Integer id) {
          this.id = id;
      }
  ​
      public String getName() {
          return name;
      }
  ​
      public void setName(String name) {
          this.name = name;
      }
  ​
      public Date getBirthday() {
          return birthday;
      }
  ​
      public void setBirthday(Date birthday) {
          this.birthday = birthday;
      }
  ​
      public Double getSalary() {
          return salary;
      }
  ​
      public void setSalary(Double salary) {
          this.salary = salary;
      }
  ​
      @Override
      public String toString() {
          return "Emp{" +
                  "id=" + id +
                  ", name='" + name + '\'' +
                  ", birthday=" + birthday +
                  ", salary=" + salary +
                  '}';
      }
  }
  ​

1.4 开发DAO组件

  
  package com.baizhi.dao;
  ​
  import com.baizhi.entity.Emp;
  ​
  import java.util.List;
  ​
  public interface EmpDAO {
  ​
      //保存
      void save(Emp emp);
  ​
      //查询所有
      List<Emp> findAll();
  }
  ​

1.5 开发Mapper配置文件

  <?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE mapper
          PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  ​
  <mapper namespace="com.baizhi.dao.EmpDAO">
  ​
      <!--保存
          useGeneratedKeys="true" keyProperty="id"仅对mysql数据库有效,
          可进行主键自增,插入数据时直接插入null值即可
      -->
      <insert id="save" parameterType="Emp" useGeneratedKeys="true" keyProperty="id">
          insert into emp
          values (#{id}, #{name}, #{birthday}, #{salary})
      </insert>
  ​
      <!--查询所有-->
      <select id="findAll" resultType="Emp">
          select id,name,birthday,salary from emp
      </select>
  ​
  </mapper>

1.6 开发Service组件

  
  package com.baizhi.service;
  ​
  import com.baizhi.entity.Emp;
  ​
  import java.util.List;
  ​
  public interface EmpService {
  ​
      void save(Emp emp);
  ​
      List<Emp> findAll();
  }
  ​

1.7 编写Service实现类

  package com.baizhi.service;
  ​
  import com.baizhi.dao.EmpDAO;
  import com.baizhi.entity.Emp;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Service;
  import org.springframework.transaction.annotation.Transactional;
  ​
  import java.util.List;
  ​
  @Service("empService")
  @Transactional
  public class EmpServiceImpl  implements EmpService{
      private EmpDAO empDAO;
      //推荐构造注入
      @Autowired
      public EmpServiceImpl(EmpDAO empDAO) {
          this.empDAO = empDAO;
      }
  ​
      @Override
      public void save(Emp emp) {
          empDAO.save(emp);
      }
  ​
      @Override
      public List<Emp> findAll() {
          return empDAO.findAll();
      }
  }
  ​

1.8 测试Service组件

  package com.baizhi.test;
  ​
  import com.baizhi.entity.Emp;
  import com.baizhi.service.EmpService;
  import org.springframework.context.ApplicationContext;
  import org.springframework.context.support.ClassPathXmlApplicationContext;
  ​
  import java.util.Date;
  ​
  public class TestEmpServiceImpl {
      public static void main(String[] args) {
          ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
          EmpService empService = (EmpService) context.getBean("empService");
          empService.save(new Emp(null,"皮卡丘",new Date(),123.456));
          empService.findAll().forEach(emp -> System.out.println("emp = " + emp));
          //输出结果:emp = Emp{id=1, name='皮卡丘', birthday=Wed Apr 27 16:53:24 CST 2022, salary=123.46}
      }
  }
  ​

1.9 编写springmvc.xml配置文件

  
  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:context="http://www.springframework.org/schema/context"
         xmlns:mvc="http://www.springframework.org/schema/mvc"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
                              http://www.springframework.org/schema/beans/spring-beans.xsd
                              http://www.springframework.org/schema/context
                              https://www.springframework.org/schema/context/spring-context.xsd
                              http://www.springframework.org/schema/mvc
                              https://www.springframework.org/schema/mvc/spring-mvc.xsd">
      
      <!--开启注解扫描-->
      <context:component-scan base-package="com.baizhi.controller"/>
      
      <!--开启mvc注解驱动-->
      <mvc:annotation-driven/>
      
      <!--配置视图解析器-->
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix" value="/"/>
          <property name="suffix" value=".jsp"/>
      </bean>
  ​
  </beans>

1.10 配置web.xml

  <!DOCTYPE web-app PUBLIC
          "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
          "http://java.sun.com/dtd/web-app_2_3.dtd" >
  ​
  <web-app>
      <display-name>Archetype Created Web Application</display-name>
  ​
  ​
      <!-- 加载spring.xml-->
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring.xml</param-value>
      </context-param>
  ​
      <!-- 配置spring工厂启动-->
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
  ​
      <!-- 配置springmvc-->
      <servlet>
          <servlet-name>springmvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
          </init-param>
      </servlet>
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
  </web-app>
  ​

1.11 开发Controller组件

  package com.baizhi.controller;
  ​
  import com.baizhi.entity.Emp;
  import com.baizhi.service.EmpService;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RestController;
  ​
  import java.util.List;
  ​
  @RestController  //使用此注解可将类中返回值转为json响应到浏览器
  @RequestMapping("emp")
  public class EmpController {
  ​
      private EmpService empService;
      //推荐构造注入
      @Autowired
      public EmpController(EmpService empService) {
          this.empService = empService;
      }
  ​
      //保存
      @RequestMapping("save")
      public void save(Emp emp){
          empService.save(emp);
      }
  ​
      //查询所有
      @RequestMapping("findAll")
      public List<Emp> findAll(){
          return empService.findAll();
      }
  }
  ​

1.12 部署tomcat服务器进行测试

测试插入数据:

访问地址:http://localhost:8888/ssm/emp/save?name=猪猪侠&birthday=2020/12/12&salary=234.567

测试查询数据:

访问地址:http://localhost:8888/ssm/emp/findAll

1.13 现有SSM开发存在问题

  • 大量maven冗余配置

  • 每次构建项目都要书写大量相同配置极大浪费了项目开发时间

  • 每次整合第三方技术都需要编写相关配置文件

  • 项目测试每次都需要部署到tomcat

注意:这就是早期的SSM或者SSH开发存在问题,是不是很麻烦☹️☹️☹️

2. SpringBoot的引言

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

       Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

Spring Boot 全新框架作用:简化spring应用初始搭建和开发过程

如何简化:开发人员使用springboot只要基于特定方式进行配置,简化spring使用

SpringBoot 微框架: 5分钟完成之前ssm中环境

springboot(微框架) = springmvc(控制器) + spring core(项目管理)

3. SpringBoot的优势

(1)创建完整的独立的Spring应用程序:使spring、springmvc只有一个容器

(2)内部嵌入了Tomcat,无需部署WAR文件:springboot内嵌tomcat,应用跑在内嵌服务器

(3)简化Maven配置,自动配置Spring、Springmvc,没有XML配置:只需要额外引入少数几个依赖

         “用了springboot,spring应用再无xml”

4. SpringBoot的约定

总结:

  • springboot项目中必须在src/main/resources中放入application.yml(.properties)核心配置文件,且名字必须为:application

  • springboot项目中必须在src/main/java中所有子包之外构建全局入口类型:xxApplication,入口类一个springboot项目只能有一个

5. SpringBoot环境搭建

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

SpringBoot官网:Spring Boot

新建项目时只需要建立普通的maven项目即可,不需要勾选任何选项:

 新建后的项目结构如下,需要额外引入src/test/resources目录:

5.1 环境要求

  # 1.System Requirements
      JDK 1.8+
      MAVEN 3.2+  
      Spring Framework 5.x+ 即SpringBoot 2.5.0以上 
  ​
  # 2.ServletContainers: 
      Tomcat 9.0+
  ​
  # 3.开发工具
      IDEA 2021版本 

5.2 新建项目中引入依赖

  <!--
      继承springboot的父项目,便于维护版本
      2.3之前版本:2.3.x.RELEASE 
      2.4之后版本:2.4.x  去掉了RELEASE,改为纯数字表示
  -->
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.5.0</version>
  </parent>
  ​
  <!--引入依赖-->
  <dependencies>
      <!--引入springboot的web支持spring-boot-starter-web-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
  </dependencies>

5.3 resources目录下引入application.yml配置文件

  # 公共配置
  server:
    port: 8888 # 修改内嵌服务器端口号
    servlet:
      context-path: /springboot01 # 修改项目名 注意项目名必须以“/”开头

5.4 编写入口类,启动项目

  //在项目中如下的包结构中创建入口类 Application
  /*
      com
          +| study
  */
  package com.study;
  ​
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  ​
  /**
   * @ClassName SpringBoot01Application
   * @Description TODO
   * @Author Jiangnan Cui
   * @Date 2022/4/28 11:27
   * @Version 1.0
   */
  ​
  /**
   * @SpringBootApplication注解
   * 修饰范围:只能用在入口类上,且只能出现一次
   * 作用:标识这个类是一个springboot的入口类,是启动整个springboot项目的总入口
   * springboot项目创建步骤总结:
   *    1.pom.xml文件引入依赖
   *    2.resources目录下生成application.yml
   *    3.创建入口类加入@SpringBootApplication注解,在main中启动应用
   */
  @SpringBootApplication
  public class SpringBoot01Application {
      public static void main(String[] args) {
          /**
           * 启动springboot应用
           * 参数1:指定入口类的类对象(.class),注意不是类的对象
           * 参数2:main函数参数
           * 注意:默认端口是8080,如果端口被占用,需要在application.yml中重新指定端口,否则不能正常启动项目
           */
          SpringApplication.run(SpringBoot01Application.class,args);
      }
  }
// springboot =  springmvc(控制器controller) +  spring(工厂)
/**
 *  @SpringBootApplication:  注解
 *      组合注解: 就是由多个注解组合而成一个注解
 *      元注解 : 用来修饰注解的注解,如:@Target、@Retention、@Documented、@Inherited
 *              @Target: 指定注解作用范围
 *              @Retention: 指定注解什么时候有效
 *   包含下面三个注解:
 *   @SpringBootConfiguration:
 *      这个注解就是用来自动配置spring、springmvc(初始化servlet ...)相关环境
 *
 *   @EnableAutoConfiguration: 开启自动配置
 *      自动配置核心注解  自动配置spring相关环境  自动与项目中引入的第三方技术自动配置其环境
 *      mybatis-springboot、redis-springboot 、es-springboot 、rabbitmq 第三方技术
 *
 *   @ComponentScan: 组件扫描
 *      根据注解发挥注解作用,默认扫描当前包及其子包
 *
 *  启动springboot应用时候需要传递main函数参数作为启动的第二个参数:
 *  主要用途是测试用,项目启动后动态传参,传递JVM相关的一些参数
 *  
 *  外部部署时打包成jar包:java -jar --spring.config.location=绝对路径  xxx.jar
 *
 */

运行main启动项目:

    .   ____          _            __ _ _
   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
   =========|_|==============|___/=/_/_/_/
   :: Spring Boot ::                (v2.5.0)
  ​
  2022-04-28 11:29:21.768  INFO 10908 --- [           main] com.study.SpringBoot01Application        : Starting SpringBoot01Application using Java 1.8.0_131 on cjn-PC with PID 10908 (D:\Software_Development\IDEA_code\SpringBoot\springboot01\target\classes started by cjn in D:\Software_Development\IDEA_code\SpringBoot\springboot01)
  2022-04-28 11:29:21.775  INFO 10908 --- [           main] com.study.SpringBoot01Application        : No active profile set, falling back to default profiles: default
  2022-04-28 11:29:22.628  INFO 10908 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8888 (http)
  2022-04-28 11:29:22.642  INFO 10908 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
  2022-04-28 11:29:22.642  INFO 10908 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.46]
  2022-04-28 11:29:22.716  INFO 10908 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
  2022-04-28 11:29:22.716  INFO 10908 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 895 ms
  2022-04-28 11:29:23.044  INFO 10908 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8888 (http) with context path ''
  2022-04-28 11:29:23.053  INFO 10908 --- [           main] com.study.SpringBoot01Application        : Started SpringBoot01Application in 1.805 seconds (JVM running for 3.3)
  2022-04-28 11:29:23.054  INFO 10908 --- [           main] o.s.b.a.ApplicationAvailabilityBean      : Application availability state LivenessState changed to CORRECT
  2022-04-28 11:29:23.056  INFO 10908 --- [           main] o.s.b.a.ApplicationAvailabilityBean      : Application availability state ReadinessState changed to ACCEPTING_TRAFFIC
  ​
  //说明:  出现以上日志说明启动成功

注意:到这里项目环境已经搭建成功了,看看仅仅需要5分钟😄😁😁

5.5 创建控制器并测试

  //在项目中创建指定的包结构
  /*
       com
          +| study
                  +| controller */ 
                      @Controller
  package com.study.controller;
  ​
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RestController;
  ​
  /**
   * @ClassName HelloController
   * @Description TODO
   * @Author Jiangnan Cui
   * @Date 2022/4/28 12:31
   * @Version 1.0
   */
  @RestController
  @RequestMapping("hello")
  public class HelloController {
      /**
       * @MethodName test
       * @Description 测试控制器
       *              访问地址:http://localhost:端口号/项目名/请求路径
       *              注意:springboot项目默认启动没有项目名,例如:http://localhost:8888/hello/test
       *                   需要指定项目名时,要在application.yml里面进行配置
       * @return: java.lang.String
       * @Author Jiangnan Cui
       * @Date 2022/4/28 12:32
       */
      @RequestMapping("test")
      public String test(){
          System.out.println("hello springboot!");
          return "Hello SpringBoot!";
      }
  }                                   

启动项目进行测试控制器:

  # 注意: springboot的项目启动默认无项目名,此处指定了项目名
  - 访问路径: http://localhost:8888/springboot01/hello/test
  ​
  # 注意: springboot的项目启动默认无项目名
  - 访问路径: http://localhost:8888/hello/test

测试结果:

(1)配置项目名

 (2)不配置项目名

 与此同时,控制台输出:hello springboot!

6. 相关注解说明

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

  # springboot =  springmvc(控制器controller) +  spring(工厂)
  ​
  # 入口类 SpringApplication
  - SpringBootApplication: 全局入口类 有且只能有一个
  ​
  # @SpringBootApplication:  注解
    组合注解: 就是由多个注解组合而成一个注解
    元注解 : 用来修饰注解的注解,如:@Target、@Retention、@Documented、@Inherited
            @Target: 指定注解作用范围
            @Retention: 指定注解什么时候有效
  包含下面三个注解:​
  # @SpringBootConfiguration:
      这个注解就是用来自动配置spring、springmvc(初始化servlet ...)相关环境
   
  # @EnableAutoConfiguration: 开启自动配置
      自动配置核心注解  自动配置spring相关环境  自动与项目中引入的第三方技术自动配置其环境
      mybatis-springboot、redis-springboot 、es-springboot 、rabbitmq 第三方技术
   
  # @ComponentScan: 组件扫描
      根据注解发挥注解作用,默认扫描当前包及其子包
   
  # 注意启动springboot应用时候需要传递main函数参数作为启动的第二个参数,它的主要作用是:
      测试用,项目启动后动态传参,在启动时指定jvm参数覆盖默认配置
  ​

7. 配置文件

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

7.1 配置文件的拆分

       说明:在实际开发过程中生产环境和测试环境有可能是不一样的,因此将生产中的配置和测试中的配置拆分开是非常必要的,在springboot中也提供了配置文件拆分的方式。

 这里以生产中项名名称不一致为例:

  • 生产中项目名为: springboot_prod

  • 测试中项目名为: springboot_dev

  • 端口同时为: 8888(也可设置不同)

  # 主配置文件 application.yml:用来书写相同的的配置
  # 公共配置
  server:
    port: 8888 # 修改内嵌服务器端口号
  #  servlet:
  #    context-path: /springboot01 # 修改项目名 注意项目名必须以“/”开头
  ​
  # 激活环境配置,指定哪个环境配置生效(此处写配置文件名的简写)
  spring:
    profiles:
  #    active: prod # 让prod生效
      active: dev # 让dev生效
      
      
  # 生产配置文件 application-pord.yml,其中prod为生产配置文件简名
  server:
    servlet:
      context-path: /springboot_prod   

      
  # 测试配置文件 application-dev.yml,其中dev为测试配置文件简名
  server:
    servlet:
      context-path: /springboot_dev

 启动项目后测试:

生产访问路径:http://localhost:8888/springboot_prod/hello/test

测试访问路径:http://localhost:8888/springboot_dev/hello/test

控制台同时输出hello springboot!

7.2 启动指定配置文件

       说明:往往在企业级开发过程中为SpringBoot应用启动时指定一个完整外部配置也是经常用到的,在SpringBoot中也提供这个方式来启动项目,如下所示:

 application_local_prod.yml配置文件代码:

  
  # 公共配置
  server:
    port: 9999 # 修改内嵌服务器端口号
    servlet:
      context-path: /springboot_local_prod
  ​

需要额外进行配置:

Program arguments:需要指定绝对路径

例如:

--spring.config.location=D:\Software_Development\IDEA_code\SpringBoot\springboot01\application-local-prod.yml

复制application_local_prod.yml路径方法:选中文件---右键---Copy---Absolute Path

外部部署时打包成jar包:java -jar --spring.config.location=绝对路径  xxx.jar

启动项目后测试:

访问路径:http://localhost:9999/springboot_local_prod/hello/test

控制台同时输出hello springboot!

8. 创建项目的两种方式

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

8.1 方式一:基于maven

       File---New---Module---Maven---可以不选任何骨架 / 可以勾选maven-archetype-quickstart / 可以勾选maven-archetype-webapp,完成项目创建后需要额外添加test目录下的resources目录。

8.2 方式二:基于Spring Initializr快速初始化(推荐)

File---New---Module---Spring Initializr---选择SDK和starter service URL

设置Group、Artifict、Type、Packaging、Java Version等参数

 选择依赖

 创建后的项目结构如下:

通过Spring Initializr创建的项目结构完整,生成的其他文件说明如下:

1、创建项目时,建议各字段间以-分割,例如:spring-boot-day02

2、.mvn属于隐藏文件,主要用于配合mvnw(Linux)、mvnw.cmd(Windows)进行项目启动

3、.gitIgnore属于Git忽略文件配置文件,用于Git使用

4、Spring Initializr创建项目完成后默认配置文件为application.properties,建议修改为.yml后缀,即:application.yml,相比于properties,yml更加主流

pom.xml内容说明:

  <!--springboot父项目-->
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.6.7</version>
      <relativePath/> <!-- lookup parent from repository -->
  </parent>
  ​
  <dependencies>
    <!--引入web依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  ​
    <!--引入test测试依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
  </dependencies>
  ​
  <!--
      打包插件,可以以java -jar打包
      在打成jar包运行时,必须放入此插件配置,没有插件配置无法运行打包的项目
  -->
  <build>
      <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
  </build>

8.3 添加配置

  
  server:
    port: 8888 # 修改内置服务器访问端口
    servlet:
      context-path: /spring-boot-02

8.4 新建Controller测试服务器

  
  package com.study.controller;
  ​
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RestController;
  ​
  /**
   * @ClassName HelloController
   * @Description TODO
   * @Author Jiangnan Cui
   * @Date 2022/4/29 10:00
   * @Version 1.0
   */
  @RestController
  @RequestMapping("hello")
  public class HelloController {
      //测试路径:http://localhost:8888/spring-boot-02/hello/test
      @RequestMapping("test")
      public String test(){
          System.out.println("Hello SpringBoot!");
          return "Hi SpringBoot!";
      }
  }
  ​

测试结果:

 控制台输出:Hello SpringBoot!

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值