SpringBoot基础实战一点通

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本课程包含了SpringBoot的基本使用及SpringBoot如何和各项技术整合,快速学习到 SpringBoot 整合其他技术,熟练使用 SpringBoot。

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《SpringBoot实战教程》,主讲人杨红艳,点击查看视频内容
本课程包含了SpringBoot的基本使用及SpringBoot如何和各项技术整合,快速学习到 SpringBoot 整合其他技术,熟练使用 SpringBoot。

随着动态语言的流行(Ruby,Groovy,Scala,Node.js),Java的开发显得格外的笨重:繁多的配置,低下的开发效率,复杂的部署流程以及第三方技术集成难度大。在上述环境下,SpringBoot应运而生。它使用“习惯由于配置”的理念让项目快速运行起来。使用SpringBoot很容易创建一个独立运行(运行jar,内嵌Servlet容器)准生产级别的基于Spring框架的项目,使用SpringBoot可以不用或只需要很少的Spring配置。

第一节:SpringBoot 入门程序

SpringBoot核心特点:

  1. 可以以jar包的形式独立运行,运行一个SpringBoot项目只需通过 java -jar xx.jar来运行
  2. 内嵌Servlet容器,SpringBoot可以选择Tomcat,Jetty或者Undertow,这样我们无须以war包形式部署项目
  3. 简化Maven配置,SpringBoot提供了一系列的starter pom 来简化Maven的依赖加载
  4. SpringBoot会根据在类路径中的jar包,类,为jar包中的类自动配置Bean,这样就极大的减少了我们要使用的配置
  5. ......

点击学习更多>>

第二节:超全!默认全局配置文件都在这啦!

SpringBoot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。

默认的配置很多,使用的时候查找即可:

# BANNER
banner.charset=UTF-8 # Banner file encoding.
banner.location=classpath:banner.txt # Banner file location.
banner.image.location=classpath:banner.gif # Banner image file location (jpg/png can also be used).
banner.image.width= # Width of the banner image in chars (default 76)
banner.image.height= # Height of the banner image in chars (default based on image height)
banner.image.margin= # Left hand image margin in chars (default 2)
banner.image.invert= # If images should be inverted for dark terminal themes (default false)

......

点击学习更多>>

第三节:3个经典场景配置

1、SpringBoot为我们提供了企业级开发绝大多数场景的starter pom,只要使用了应用场景所需的starter pom,相关的技术配置将会消除,就可以得到SpringBoot为我们提供的自动配置的Bean。

2、在SpringBoot中如何获取自定义的值?
使用@Value(“${book.author}”) 获取自定义属性的值。

3、SpringBoot还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties中的属性和一个Bean的属性关联,从而实现类型安全的配置。

点击学习更多>>

第四节:自动配置的原理详解

既然SpringBoot可以在根据可依赖的架包进行自动配置,说明在项目启动的时候进行了配置。

SpringBoot自动配置的原理就是读取了文件中的类,根据属性使用默认值。
点击学习更多>>

第五节:不再做重复工作!创建父工程搞定

在创建每个SpringBoot前,都需要父级依赖。显然很麻烦,那么能不能不做父级依赖?我们自己创建父级依赖,这个父级工程对jar包进行管理,那么子工程就不用每一个进行父级依赖了。

 <dependencyManagement>
      <dependencies>
          <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-dependencies</artifactId>
                  <version>1.5.6.RELEASE</version>
                  <type>pom</type>
                  <scope>import</scope>
          </dependency>
      </dependencies>
  </dependencyManagement>
  
  <build>
          <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
      </plugins>
  </build>

子工程如何实现父级依赖呢?

点击学习更多>>

第六节:玩转SpringBootApplication注解

应该把启动方法放在一个单独的类当中,这个类就称为启动类。

@EnableAutoConfiguration
@ComponentScan("com.qianfeng.controller")
public class SpringController {
        public static void main(String[] args) {
        SpringApplication.run(SpringController.class, args);
    } 
}

另外还有一个注解,该注解是一个组合注解,可以替代启动类的两个注解。

@SpringBootApplication    //组合注解

点击学习更多>>

第七节:一文了解SpringBoot的日志管理

SprongBoot使用的默认日志框架是Logback,并用INFO级别输出到控制台。
日志输出内容元素具体如下:

  • 时间日期:精确到毫秒
  • 日志级别:ERROR, WARN, INFO, DEBUG or TRACE
  • 进程ID
  • 分隔符:— 标识实际日志的开始
  • 线程名:方括号括起来(可能会截断控制台输出)
  • Logger名:通常使用源代码的类名
  • 日志内容

点击学习更多>>

第八节:2种loger的使用

第一种:带有loger的配置,不指定级别,不指定appender

< logger name="com.qianfeng.controller" />

第二种:带有多个loger的配置,指定级别,指定appender

<logger name="com.qianfeng.controller.SpringController" level="WARN" additivity="false">  
            <appender-ref ref="console"/> 
 </logger>

点击学习更多>>

第九节:不同环境下如何输出不同日志

根据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-spring.xml中使用 springProfile 节点来定义,方法如下:

<!-- 测试环境+开发环境. 多个使用逗号隔开-->
<springProfile name="test,dev">
    <logger name="com.qianfeng.controller" level="info" />
</springProfile>

<!-- 生产环境-->
<springProfile name="prod">
    <logger name="com.qianfeng.controller" level="ERROR" />
</springProfile>

在application.properties文件中指明使用哪一种:

spring.profiles.active=prod

点击学习更多>>

第十节:还在手动操作?试试配置为开发模式

大家会发现每次对代码进行了修改之后,都需要手动的进行启动,这样很麻烦。所以我们可以把工程设置为开发模式,就不需要这样麻烦了。设置开发模式之后,需要加入两个依赖:

<!-- 加入以下依赖,代码做了修改,不用重新运行  -->
       <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>springloaded</artifactId>
      </dependency>
      <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId> </dependency>

点击学习更多>>

第十一节:详解访问静态资源

在SpringBoot中加载静态资源和在普通的web应用中不太一样。默认情况下,Spring Boot从classpath的/static,/public或/META-INF/resources文件夹或从ServletContext根目录提供静态内容。

如果想自己配置,我们需要在全局配置当中,覆盖默认配置:
其对应属性为:

spring.resources.static-locations=classpath:/static/

点击学习更多>>

第十二节:如何解析Json数据

SpringBoot默认配置的是Jackson。
自定义使用FastJson解析Json数据,添加依赖:

<!-- fastjson的依赖 -->
      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.15</version>
 </dependency>

配置FastJson有两种方式:
第一种:让启动类继承WebMvcConfigurerAdapter
......

点击学习更多>>

第十三节:定义全局异常处理器

SpringBoot使用AOP思想进行全局异常处理
异常通常作为一个通知介入的,所以说我们需要用到注解。

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class) 
    @ResponseBody
    public Map<String,Object> allExceptionHandler(  
            Exception exception) throws Exception  
    {  
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("errorCode", 500);
        map.put("errorMsg", exception.toString());
        return map;
    }  
}

点击学习更多>>

第十四节:异步调用实现多线程处理任务

在项目中,当访问其它接口较慢或者做耗时任务时,不想程序一直卡在耗时任务上,想程序能够并行执行,我们可以使用多线程来并行的处理任务,SpringBoot提供了异步处理方式@Async。

点击学习更多>>

第十五节:官方推荐!SpringBoot这样整合JSP

Spring Boot官方不推荐使用jsp,因为jsp相对于一些模板引擎,性能都比较低,官方推荐使用thymeleaf。
springboot整合jsp,必须是war工程。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
      </dependency>
      
       <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
   </dependency>

点击学习更多>>

第十六节:详解SpringBoot整合Freemarker

springboot不建议使用jsp,使用模板引擎,比如themleaf,velocity,freemarker整合freemarker 。

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

点击学习更多>>

第十七节:SpringBoot整合Thymeleaf

SpringBoot官方是不推荐jsp页面的,推荐的是模板引擎。Thymeleaf是其中一种模板引擎。SpringBoot如何整合Thymeleaf:

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

点击学习更多>>

第十八节:SpringBoot整合QuartZ

QuartZ是一个任务调度框架,我们以实现每隔一秒打印一下时间为例:

//任务
@Component
public class MyJob {
    
    @Scheduled(fixedRate=1000)
    public void run()
    {
System.out.println(new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(new Date()));
    }
}

点击学习更多>>

第十九节:SpringBoot中如何使用JdbcTemplate?

我们通过新增数据库表中的用户来实现SpringBoot中如何使用JdbcTemplate。

<!-- springboot整合jdbctemplate -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-jdbc</artifactId>
       </dependency>
<!-- mysql的依赖 -->       
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
       </dependency>

点击学习更多>>

第二十节:SpringBoot中如何使用xml方式整合Mybatis?

通过实现对数据库表中添加用户以及分页查找用户来实现SpringBoot中如何使用xml方式整合Mybatis。
添加mybatis、MySQL、druid数据库连接池、分页依赖:

<!-- springboot整合mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
<!-- MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
<!-- alibaba的druid数据库连接池 -->
         <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.11</version>
        </dependency>
<!-- 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.1.2</version>
        </dependency>
<!-- @Param注解在该包中 -->
        <dependency>
            <groupId>org.apache.ibatis</groupId>
            <artifactId>ibatis-core</artifactId>
            <version>3.0</version>
        </dependency>

点击学习更多>>

第二十一节:SpringBoot中如何使用注解方式整合Mybatis?

通过实现查找用户和添加用户,来解析SpringBoot中如何使用注解方式去整合Mybatis。

@Service
public class UsersServiceImpl implements UsersService {

    @Autowired
    private UsersMapper usersMapper;

    @Override
    public Users findUser(String name) {
        return usersMapper.findUserByName(name);
    }

    @Override
    public void saveUser(Users user) {
        usersMapper.addUser(user.getName(), user.getPassword());
    }

}

点击学习更多>>

第二十二节:如何区分多数据源?

在项目中,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源。

如何区分多个数据源:

  • 通过包来区分:com.db1.mapper、com.db2.mapper
  • 使用注解来区分:需要用到大量的注解,一般不推荐使用。

点击学习更多>>

第二十三节:SpringBoot的事务管理

在SpringBoot中可以使用xml配置文件的方式或者注解的方式来声明事务。

在Spring Boot中推荐使用@Transactional注解来声明事务。

当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,SpringBoot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。

点击学习更多>>

第二十四节:SpringBoot如何整合JPA-Hibernate?

通过实现数据库表中添加、查找、删除用户的功能来详解SpringBoot如何整合JPA-Hibernate。

   <!-- springboot整合jpa -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
      <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
       </dependency>

点击学习更多>>

第二十五节:如何在SpringBoot中实现邮件的发送?

获取发件人的邮箱:

@Component
public class EmailConfig {

    @Value("${spring.mail.username}")
    private String emailFrom;
    
    public String getEmailFrom() {

        return emailFrom;
    }
    public void setEmailFrom(String emailFrom) {
        this.emailFrom = emailFrom;
    }
}

点击学习更多>>

第二十六节:如何实现发送带附件的邮件?

发送带附件的邮件:

void sendAttachmentMail(String sendTo, String title, String content, File file);

点击学习更多>>

第二十七节:如何发送基于模板的邮件?

模板:使用一些相同的模板,但里面的数据是可以变化的。
添加模板引擎依赖:

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

点击学习更多>>

第二十八节:SpringBoot实现文件上传

实现上传页面:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"></meta>
<title>文件上传</title>
</head>
<body>
    <h2>文件上传</h2>
    <hr/>
    <form method = "POST" enctype="multipart/form-data" action="/upload">
    <p>
        文件<input type="file" name="file"/>
    </p>
    <p>
        <input type="submit" value="上传"/>
    </p>
    </form>
</body>
</html>

点击学习更多>>

第二十九节:SpringBoot实现批量文件上传

批量上传需要利用for循环实现:

  //创建文件在服务器端的存放路径
            String dir=request.getServletContext().getRealPath("/upload");
            File fileDir = new File(dir);
            if(!fileDir.exists())
                fileDir.mkdirs();
            //生成文件在服务器端存放的名字
            for(int i = 0;i<file.length;i++) {
                String fileSuffix=file[i].getOriginalFilename().substring(file[i].getOriginalFilename().lastIndexOf("."));
                String fileName=UUID.randomUUID().toString()+fileSuffix;
                File files = new File(fileDir+"/"+fileName);
                //上传
                file[i].transferTO(files);
            }

点击学习更多>>

第三十节:什么是Neo4J?

Neo4j是一个高性能的,NOSQL图形数据库,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。
image.png

点击学习更多>>

第三十一节:SpringBoot如何整合Neo4j?

添加依赖:

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

在全局配置文件application.properties中添加:

spring.data.neo4j.uri=http://localhost:7474
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123

点击学习更多>>

第三十二节:SpringBoot如何整合Redis(单机版)?

在程序之中Redis缓存如何使用:
首先开启缓存,在启动类中添加

@EnableCaching   //开启缓存

点击学习更多>>

第三十三节:SpringBoot如何整合Redis集群?

添加集群配置:

spring.redis.cluster.nodes=192.168.25.128:7550, 192.168.25.128:7551, 192.168.25.128:7552, 192.168.25.128:7553, 192.168.25.128:7554, 192.168.25.128:7555

点击学习更多>>

第三十四节:SpringBoot如何集成MongoDB?

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

点击学习更多>>

第三十五节:SpringBoot怎样整合ActiveMQ?

ActiveMQ是符合JMS规范的消息管理者。

<!-- 整合ActiveMQ的依赖 -->
       <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-activemq</artifactId>  
       </dependency> 

点击学习更多>>

第三十六节:SpringBoot怎样整合RabbitMQ?

通过SpringBoot集成RabbitMQ实现消息的发送,接收。

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

点击学习更多>>

第三十七节:Kafka概述及安装

Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在群集内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上。 它与Apache Storm和Spark非常好地集成,用于实时流式数据分析。

点击学习更多>>

第三十八节:SpringBoot如何实现Solr?

添加依赖:

<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
 </dependency>

全局配置:

spring.data.solr.host=http://192.168.25.129:8080/solr

点击学习更多>>

第三十九节:ElasticSearch概述及安装

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

点击学习更多>>

第四十节:SpringBoot如何整合ElasticSearch?

添加相关依赖:

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

application.yml全局配置:

       spring:
           data:
           elasticsearch:
           cluster-nodes: 192.168.25.129:9300
           local: false
           repositories:
              enabled: true

点击学习更多>>

第四十一节:SpringBoot如何整合WebSocket?

WebSocket 连接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端。WebSocket 只需要建立一次连接,就可以一直保持连接状态。这相比于轮询方式的不停建立连接显然效率要大大提高。

点击学习更多>>

第四十二节:SpringBoot如何整合AngularJS?

SpringBoot整合AngularJS实现数据库表页面的增删改查。
添加相关依赖:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.nekohtml</groupId>
        <artifactId>nekohtml</artifactId>
        <version>1.9.22</version>
</dependency>
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.3.2</version>
</dependency>

点击学习更多>>

查看课程视频教程

相关文章
|
SQL 存储 Java
SpringBoot基础学习文章
SpringBoot基础学习文章
195 0
SpringBoot基础学习文章
|
Java 容器
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
`SpringBoot`在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取`一个配置参数`也可以将`一系列的配置`映射绑定到`JavaBean`的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
|
安全 Java 关系型数据库
Mall电商实战项目全面升级!支持最新版SpringBoot,干掉循环依赖
技术栈升级 mall项目采用现阶主流技术实现,这些主流技术基本都升级了目前最新稳定版,具体升级内容大家可以参考下表。 技术版本说明
|
Java Docker Python
docker部署项目 dockerfile 实战 SpringBoot、flask
作者主页:https://www.couragesteak.com/
docker部署项目 dockerfile 实战 SpringBoot、flask
|
负载均衡 Java API
SpringBoot整合elasticsearch-rest-client实战
SpringBoot整合elasticsearch-rest-client实战
1385 0
SpringBoot整合elasticsearch-rest-client实战
|
JSON Java 测试技术
SpringBoot业务开发 01、Springboot实战:实现Gitee图床上传及删除(含完整代码)
SpringBoot业务开发 01、Springboot实战:实现Gitee图床上传及删除(含完整代码)
SpringBoot业务开发 01、Springboot实战:实现Gitee图床上传及删除(含完整代码)
|
Java 应用服务中间件 容器
springboot原理实战(15)--springboot优化和定制tomcat
springboot原理实战(15)--springboot优化和定制tomcat
582 0
springboot原理实战(15)--springboot优化和定制tomcat
|
Java Spring
springboot原理实战(12)--扫描包,banner,配置属性默认值的3种方式
springboot原理实战(12)--扫描包,banner,配置属性默认值的3种方式
809 0
springboot原理实战(12)--扫描包,banner,配置属性默认值的3种方式
|
Java 容器 Spring
springboot原理实战(11) -- springboot扩展分析CommandLineRunner
springboot原理实战(11) -- springboot扩展分析CommandLineRunner
177 0
springboot原理实战(11) -- springboot扩展分析CommandLineRunner
|
Java Spring 容器
springboot实战原理(10)--配置事件监听的4种方式和原理
springboot实战原理(10)--配置事件监听的4种方式和原理
545 0
springboot实战原理(10)--配置事件监听的4种方式和原理