Spring boot学习笔记 002——Spring Boot的自动配置、Command-line Runner

23 篇文章 0 订阅
8 篇文章 0 订阅

start.spring.io

通过start.spring.io创建程序

如下图所示,填对应的表单,描述Spring Boot项目的主要信息,例如Project Metadata、Dependency等。在Project Dependencies区域,就可以根据应用程序的功能需要选择相应的starter。

  • 点击“Switch to the full version.”,展示完整页面
  • Group设置为:hd.lhy.test
  • Artifact设置为:springboot
  • Name设置为:Springboot
  • Package Name设置为:hd.lhy.test.springboot
  • Packaging代表打包方式,我们选jar
  • Spring Boot Version选择最新的
  • 创建Maven工程(对Gradle比较熟悉的同学可以选择Gradle工程)
  • 点击“Generate Project”下载工程包。

这里写图片描述

这里写图片描述

Eclipse导入下载的工程,可以看到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>

    <groupId>hd.lhy.test</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Springboot</name>
    <description>Demo project for Spring Boot</description>

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

    <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

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


</project>

Spring Boot starters

  • 简化Spring项目的库依赖管理

    将某一特定功能所需要的依赖库都整合在一起,就形成一个starter

    例如: 连接数据库、springmvc、spring测试框架等。

常用的starter以及用处:

  • spring-boot-starter

    核心Spring Boot starter,提供了大部分基础功能,其他starter都依赖于它,没有必要显式定义它。

  • spring-boot-starter-actuator

    主要提供监控、管理和审查应用程序的功能。

  • spring-boot-starter-jdbc

    提供对JDBC操作的支持,包括连接数据库、操作数据库,以及管理数据库连接等等。

  • spring-boot-starter-data-jpa

JPA starter提供使用Java Persistence API(例如Hibernate等)的依赖库。

  • spring-boot-starter-data-*

    提供对MongoDB、Data-Rest或者Solr的支持。

  • spring-boot-starter-security:

    提供所有Spring-security的依赖库。

  • spring-boot-starter-test:

    包括了spring-test依赖以及其他测试框架,例如JUnit和Mockito

  • spring-boot-starter-web:

    web应用程序的依赖库。


Spring Boot的自动配置

  • xxxApplication.java

    在Spring Boot项目中,xxxApplication.java是应用程序的入口,负责程序启动以及一些基础性的工作。

这里写图片描述

  • @SpringBootApplication

    这个注解是该应用程序入口的标志,然后main函数通过SpringApplication.run(xxxApplication.class, args)来运行Spring Boot应用。

public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
  • SpringBootApplication注解

    由其他几个类组合而成:

    • @Configuration(等同于spring中的xml配置文件,使用Java文件做配置可以检查类型安全)

    • @EnableAutoConfiguration(自动配置)

    • @ComponentScan(组件扫描,可以自动发现和装配一些Bean)。
  • pom.xml

    • com.h2database
      作用域scope是全局的runtime。也就是说,当应用程序启动时,如果Spring Boot在classpath下检测到org.h2.Driver的存在,就会自动配置H2数据库连接!

启动项目

右键单击xxxApplication.java ,然后如下图:

这里写图片描述

启动成功后,如图所示:

这里写图片描述

控制台的输出信息
在创建的时候选择了jdbc和jpa等starters,Spring Boot将自动创建JPA容器,并使用Hibernate5.0.11,使用H2Dialect管理H2数据库(内存数据库)

这里写图片描述


Command-line runners

  • 新建一个StartupRunner类

在src/main/java/hd/lhy/test/springboot/下建立StartRunner类,并实现CommandLineRunner接口。

这里写图片描述

这个接口只有一个函数:

public void run(String... args)
这个方法会在应用程序启动后首先被调用。
package hd.lhy.test.springboot;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;

public class StartupRunner implements CommandLineRunner {

    protected final Logger logger = LoggerFactory.getLogger(StartupRunner.class);

    @Override
    public void run(String... args) throws Exception {
        // TODO Auto-generated method stub

        logger.info("hello");

    }

}
  • SpringbootApplication类中创建bean对象,代码如下:
package hd.lhy.test.springboot;

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

@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

    @Bean
    public StartupRunner schedulerRunner() {
        return new StartupRunner();
    }
}

再次启动项目,启动程序,就可以看到hello的输出!

这里写图片描述

  • Command line runners优势:

    只需要在应用程序启动时执行一次的任务,适合利Command line runners来完成。
    Spring Boot应用程序在启动后,会遍历CommandLineRunner接口的实例并运行它们的run方法。也可以用@Order注解(或者实现Order接口)来规定所有CommandLineRunner实例的运行顺序。

    command-line runner的这个特性,再配合依赖注入,可以在应用程序启动时后首先引入一些依赖bean,例如data source、rpc服务或者其他模块等,这些对象的初始化可以放在run方法中。

注意:

在run方法中执行初始化动作的时候一旦遇到任何异常,应用程序会停止运行,因此最好用try/catch语句处理可能遇到的异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值