SpringBoot介绍

目录

1. 了解SpringBoot

1.1.什么是SpringBoot

1.2.为什么要学习SpringBoot

1.3.SpringBoot的特点 

2.快速入门

2.1.创建工程

2.2.添加依赖 

2.2.1.添加父工程坐标

2.2.2.添加web启动器

2.2.3.管理jdk版本

2.2.4.完整pom

2.3.启动类

2.4.编写controller

2.5.启动测试

3.项目集成

3.1打包配置

3.2配置环境属性

3.2读取资源文件

 3.2.1AbstractBaseController

 3.2.2I18nController继承AbstractBaseController

3.3集成单元测试 

3.3.1POM文件配置

 3.3.2TestMessageController

4.整合jdbc和事务

5.整合连接池

3.整合mybatis

3.1原生mybatis

3.2通用mapper

4.整合redis

5.整合swagger


1. 了解SpringBoot

1.1.什么是SpringBoot

SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品:

介绍如下:

Takes an opinionated view of building Spring applications and gets you up and running as quickly as possible. 

翻译一下:

对构建Spring应用程序采取有见解的观点,并让您尽快启动和运行。 

其实人们把Spring Boot 称为搭建程序的 脚手架 。其最主要作用就是帮我们快速的构建庞大的spring项 目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。

1.2.为什么要学习SpringBoot

Java一直被人诟病的一点就是臃肿、麻烦。当我们还在辛苦的搭建项目时,可能Python程序员已经把功 能写好了,究其原因注意是两点:

  • 复杂的配置

项目各种配置其实是开发时的损耗, 因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。

  • 混乱的依赖管理

项目的依赖管理是一件时间成本比较高的事情。决定项目里要用哪些库就已经会浪费比较多的宝贵时间,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在棘手。并且添加依赖不是写应用程序代码,一旦选错了依赖的版本,随之而来的不兼容问题毫无疑问会是生产力的杀手。

而SpringBoot让这一切成为过去!

Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的 Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器starter),这样我们就可以简单的开始。多数Spring Boot应用只需要很少的Spring配置。 

我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程。

1.3.SpringBoot的特点 

Spring Boot 主要目标是:

  • 创建独立的Spring应用程序
  • 直接嵌入Tomcat、Jetty或Undertow(无需部署WAR文件)
  • 提供有见解的“starter”依赖项以简化构建配置
  • 尽可能自动配置Spring和第三方库
  • 提供生产就绪功能,如指标、运行状况检查和外部化配置
  • 绝对没有代码生成,也不需要XML配置

更多细节,大家可以到官网查看:Spring Boot

2.快速入门

接下来,我们就来利用SpringBoot搭建一个web工程,体会一下SpringBoot的魅力所在!

2.1.创建工程

我们先新建一个空的工程:

项目信息:

2.2.添加依赖 

 SpringBoot提供了一个名为spring-boot-starter-parent的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以 这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!

2.2.1.添加父工程坐标

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

2.2.2.添加web启动器

为了让SpringBoot帮我们完成各种自动配置,我们必须引入SpringBoot提供的自动配置依赖,我们称 为 启动器 。因为我们是web项目,这里我们引入web启动器:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

需要注意的是,我们并没有在这里指定版本信息。因为SpringBoot的父工程已经对版本进行了管理了。 这个时候,我们会发现项目中多出了大量的依赖:

这些都是SpringBoot根据spring-boot-starter-web这个依赖自动引入的,而且所有的版本都已经管理 好,不会出现冲突。

2.2.3.管理jdk版本

如果我们想要修改SpringBoot项目的jdk版本,只需要简单的添加以下属性即可,如果没有需求,则不 添加。

<properties>
    <java.version>1.8</java.version>
</properties>

2.2.4.完整pom

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yuzhongsan.demo</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

2.3.启动类

Spring Boot项目通过main函数即可启动,我们需要创建一个启动类:

 

 编写main函数:

package com.ts;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // 启动SpringBoot程序,而后自带子包扫描
public class StartSpringBootMain {
    public static void main(String[] args) {
        SpringApplication.run(StartSpringBootMain.class, args);
    }
}

2.4.编写controller

代码:

package com.ts.controller;


import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("/")
    public String home() {
        return "Hello World!";
    }

    @RequestMapping(value = "/echo/{message}", method = RequestMethod.GET)
    public String echo(@PathVariable("message") String msg) {
        return "HelloController--【ECHO】:" + msg;
    }

}

2.5.启动测试

运行main函数,查看控制台,并且可以看到监听的端口信息:

  • 监听的端口是:8080
  • 请求映射路径是:/

 打开页面访问:http://localhost:8080

测试成功了! 

3.项目集成

3.1打包配置

在POM文件中添加如下配置:

<build>
    <finalName>springboot-2023</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>${java.version}</source><!-- 源代码使用的开发版本 -->
                <target>${java.version}</target><!-- 需要生成的目标class文件的编译版本 -->
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
        <plugin>    <!-- 该插件的主要功能是进行项目的打包发布处理 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>    <!-- 设置程序执行的主类 -->
                <mainClass>com.ts.StartSpringBootMain</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3.2配置环境属性

查看SpringBoot的全局属性可知,端口可通过application.yml方式配置,

新建application.yml文件,并进行如下配置:

server:
  port: 80      # 此处设置的服务的访问端口配置

3.2读取资源文件

 如果文件内容显示的不是明文,请勾选【Transparent native-to-ascii conversion】

 在resources目录下,如下图新建message.properties文件:

welcome.url=www.ts.com
welcome.msg=欢迎{0}光临!

 3.2.1AbstractBaseController

AbstractBaseController是一个抽象公共类,是controller的基类,主要用于定义共通方法,其目的是controller继承后直接调用,减少冗余代码。

package com.ts.base;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.MessageSource;

import javax.annotation.Resource;
import java.util.Locale;

public abstract class AbstractBaseController {
    public Logger log = LoggerFactory.getLogger(this.getClass());

    @Resource
    private MessageSource messageSource; // 自动注入此资源对象

    public String getMessage(String key, String... args) {
        return this.messageSource.getMessage(key, args, Locale.getDefault());
    }
}

 3.2.2I18nController继承AbstractBaseController

package com.ts.controller;


import com.ts.base.AbstractBaseController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class I18nController extends AbstractBaseController {
    @RequestMapping("/i18n")
    public String i18n() {
        return getMessage("welcome.msg", "雨中伞");
    }


}

3.3集成单元测试 

3.3.1POM文件配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>

 3.3.2TestMessageController

package com.ts.controller.test;


import com.ts.StartSpringBootMain;
import com.ts.controller.I18nController;
import junit.framework.TestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import javax.annotation.Resource;

@SpringBootTest(classes = StartSpringBootMain.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestMessageController {
    @Resource
    private I18nController i18nController;

    @Test
    public void i18n() {
        String message = i18nController.getMessage("welcome.msg", "大家");
        TestCase.assertEquals("欢迎大家光临!", message);
    }
}

3.4yml多profile配置

多profile配置主要用途是对于yml不同环境不同的属性进行单独配置,而对于共通的属性进行统一配置的管理方式。

在resources目录下,如图分别创建application-dev.yml和application-prod.yml

 在application.yml文件中配置dev环境生效,如下图:

server:
  port: 80      # 此处设置的服务的访问端口配置
spring:
  messages:  # 表示进行资源配置
    basename: i18n/message  # 资源文件的名称
  profiles:
    active: dev

 经验证重启服务后,发现dev暴露的81端口生效:

3.5properties多profile配置

与yml多profile方式类似,如图分别创建c3p0-dev.properties和c3p0-prod.properties文件,我们将数据库的属性单独配置到properties文件中。

 

 c3p0-dev.properties:

c3p0.driverClass=com.mysql.cj.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:9528/sales_management?useSSL=false&zeroDateTimeBehavior=convertToNull&useLegacyDatetimeCode=false&autoReconnect=true&useUnicode=true&characterEncoding=utf8&connectTimeout=5000&socketTimeout=300000
c3p0.user=sales_management
c3p0.password=sales_management
c3p0.maxPoolSize=30
c3p0.minPoolSize=10
c3p0.initialPoolSize=10
c3p0.acquireIncrement=5
c3p0.acquireRetryAttempts=30
c3p0.acquireRetryDelay=1000
c3p0.maxIdleTime=120
c3p0.maxConnectionAge=0
c3p0.maxStatements=100
c3p0.maxStatementsPerConnection=5
c3p0.preferredTestQuery=SELECT SYSDATE FROM DUAL
c3p0.idleConnectionTestPeriod=120
c3p0.numHelperThreads=3

3.6配置数据源并指定profile配置

创建config包,将通用配置类放在该包下:

定义DataSourceConfiguration配置类,读取c3p0数据源的配置信息,并且根据spring.profiles.active 的设定,读取不同环境的数据源配置。

@PropertySource:用于加载properties属性文件,spring.profiles.active用于区分不同环境的属性文件

4.整合jdbc和事务

spring中的jdbc连接和事务是配置中的重要一环,在SpringBoot中该如何处理呢? 答案是不需要处理,我们只要找到SpringBoot提供的启动器即可:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

数据库驱动,这里我们选择MySQL:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>

至于事务,SpringBoot中通过注解@Transactional来控制。

package com.yuzhongsan.service;

import com.yuzhongsan.entity.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {
    public User queryById(Long id) {
        return new User();
    }

    @Transactional
    public void deleteById(Long id) {
        System.out.println("删除了: " + id);
    }
}

5.整合连接池

其实,在引入jdbc启动器的时候,SpringBoot已经自动引入了一个连接池:

3.整合mybatis

3.1原生mybatis

SpringBoot官方并没有提供Mybatis的启动器,不过Mybatis官网(https://github.com/mybatis/spring-boot-starter)自己实现了:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.3.0</version>
</dependency>

指定mybatis相关配置:

mybatis:
  # mybatis 别名扫描
  type-aliases-package: com.yuzhongsan.entity
  # mapper.xml文件位置,如果没有映射文件,请注释掉
  mapper-locations: classpath:mappers/*.xml

另外,Mapper接口的位置在application.yml中并不能配置,Mapper接口的扫描有两种实现方式:

  • 方式一

我们需要给每一个Mapper接口添加 @Mapper 注解,由Spring来扫描这些注解,完成Mapper的动态代理。

@Mapper
public interface UserMapper {
}
  •  方式二

 在启动类上添加扫描包注解(推荐):

package com.yuzhongsan;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
@MapperScan("com.yuzhongsan.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

这种方式的好处是,不用给每一个Mapper都添加注解。

以下代码示例中,我们将采用@MapperScan扫描方式进行。 

3.2通用mapper

官网:MyBatis 通用 Mapper (mapperhelper.github.io)

 略:国内项目建议使用,对日项目不建议使用。

4.整合redis

5.整合swagger

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值