点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章

来源:

https://www.jianshu.com/p/846bb2d26ff8

接下来关于SpringBoot的一系列文章和例子,都来自《Spring Boot Cookbook》这本书,本文的主要内容是start.spring.io的使用、Spring Boot的自动配置以及CommandRunner的角色和应用场景。

1. start.spring.io的使用

首先带你浏览http://start.spring.io/,在这个网址中有一些Spring Boot提供的组件,然后会给你展示如何让你的Spring工程变得“Bootiful”,我称之为“Boot化”。

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

Spring Boot starters可以简化Spring项目的库依赖管理,将某一特定功能所需要的依赖库都整合在一起,就形成一个starter,例如:连接数据库、springmvc、spring测试框架等等。简单来说,spring boot使得你的pom文件从此变得很清爽且易于管理。

常用的starter以及用处可以列举如下:

  • spring-boot-starter: 这是核心Spring Boot starter,提供了大部分基础功能,其他starter都依赖于它,因此没有必要显式定义它。

  • spring-boot-starter-actuator:主要提供监控、管理和审查应用程序的功能。

  • spring-boot-starter-jdbc:该starter提供对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:这个starter包括了spring-test依赖以及其他测试框架,例如JUnit和Mockito等等。

  • spring-boot-starter-web:该starter包括web应用程序的依赖库。

How do

首先我们要通过start.spring.io创建一个图书目录管理程序,它会记录出版图书的记录,包括作者、审阅人、出版社等等。我们将这个项目命名为BookPub,具体的操作步骤如下:

  • 点击“Switch to the full version.”,展示完整页面;

  • Group设置为:org.test;

  • Artifact设置为:bookpub;

  • Name设置为:BookPub;

  • Package Name设置为:org.test.bookpub;

  • Packaging代表打包方式,我们选jar;

  • Spring Boot Version选择最新的1.3.0;

  • 创建Maven工程,当然,对Gradle比较熟悉的同学可以选择Gradle工程。

  • 点击“Generate Project”下载工程包。

利用IDEA导入下载的工程,可以看到pom文件的主体如下如下所示:

 1    <groupId>com.testgroupId> 2    <artifactId>bookpubartifactId> 3    <version>0.0.1-SNAPSHOTversion> 4    <packaging>jarpackaging> 5 6    <name>BookPubname> 7    <description>Demo project for Spring Bootdescription> 8 9    <parent>10        <groupId>org.springframework.bootgroupId>11        <artifactId>spring-boot-starter-parentartifactId>12        <version>1.3.0.RELEASEversion>13        <relativePath/> 14    parent>1516    <properties>17        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>18        <java.version>1.8java.version>19    properties>2021    <dependencies>22        <dependency>23            <groupId>org.springframework.bootgroupId>24            <artifactId>spring-boot-starter-data-jpaartifactId>25        dependency>26        <dependency>27            <groupId>org.springframework.bootgroupId>28            <artifactId>spring-boot-starter-jdbcartifactId>29        dependency>30        <dependency>31            <groupId>com.h2databasegroupId>32            <artifactId>h2artifactId>33            <scope>runtimescope>34        dependency>35        <dependency>36            <groupId>org.springframework.bootgroupId>37            <artifactId>spring-boot-starter-testartifactId>38            <scope>testscope>39        dependency>40    dependencies>4142    <build>43        <plugins>44            <plugin>45                <groupId>org.springframework.bootgroupId>46                <artifactId>spring-boot-maven-pluginartifactId>47            plugin>48        plugins>49    build>

2. Spring Boot的自动配置

在Spring Boot项目中,xxxApplication.java会作为应用程序的入口,负责程序启动以及一些基础性的工作。@SpringBootApplication是这个注解是该应用程序入口的标志,然后有熟悉的main函数,通过SpringApplication.run(xxxApplication.class, args)来运行Spring Boot应用。打开SpringBootApplication注解可以发现,它是由其他几个类组合而成的:@Configuration(等同于spring中的xml配置文件,使用Java文件做配置可以检查类型安全)、@EnableAutoConfiguration(自动配置,稍后细讲)、@ComponentScan(组件扫描,大家非常熟悉的,可以自动发现和装配一些Bean)。

我们在pom文件里可以看到,com.h2database这个库起作用的范围是runtime,也就是说,当应用程序启动时,如果Spring Boot在classpath下检测到org.h2.Driver的存在,会自动配置H2数据库连接。现在启动应用程序来观察,以验证我们的想法。打开shell,进入项目文件夹,利用mvn spring-boot:run启动应用程序,如下图所示。


可以看到类似Building JPA container EntityManagerFactory for persistence unit 'default、HHH000412: Hibernate Core {4.3.11.Final}、HHH000400: Using dialect: org.hibernate.dialect.H2Dialect这些Info信息;由于我们之前选择了jdbc和jpa等starters,Spring Boot将自动创建JPA容器,并使用Hibernate4.3.11,使用H2Dialect管理H2数据库(内存数据库)。

3. 使用Command-line runners

我们新建一个StartupRunner类,该类实现CommandLineRunner接口,这个接口只有一个函数:public void run(String... args),最重要的是:这个方法会在应用程序启动后首先被调用

How do

  • 在src/main/java/org/test/bookpub/下建立StartRunner类,代码如下:

 1package com.test.bookpub; 2 3import org.slf4j.Logger; 4import org.slf4j.LoggerFactory; 5import org.springframework.boot.CommandLineRunner; 6 7public class StartupRunner implements CommandLineRunner { 8    protected final Logger logger = LoggerFactory.getLogger(StartupRunner.class); 9    @Override10    public void run(String... strings) throws Exception {11        logger.info("hello");12    }13}
  • 在BookPubApplication类中创建bean对象,代码如下:

1    @Bean2    public StartupRunner schedulerRunner() {3        return new StartupRunner();4    }

还是用mvn spring-boot:run命令启动程序,可以看到hello的输出。对于那种只需要在应用程序启动时执行一次的任务,非常适合利用Command line runners来完成。Spring Boot应用程序在启动后,会遍历CommandLineRunner接口的实例并运行它们的run方法。也可以利用@Order注解(或者实现Order接口)来规定所有CommandLineRunner实例的运行顺序。

利用command-line runner的这个特性,再配合依赖注入,可以在应用程序启动时后首先引入一些依赖bean,例如data source、rpc服务或者其他模块等等,这些对象的初始化可以放在run方法中。不过,需要注意的是,在run方法中执行初始化动作的时候一旦遇到任何异常,都会使得应用程序停止运行,因此最好利用try/catch语句处理可能遇到的异常。

● SpringRetry重试机制

● 高性能的零拷贝技术原理你真懂吗?

● Java 文件处理 Paths & Files

● Spring Boot 应用 - 静态视频资源实时播放新姿势

● 面试 Spring Boot 再也不怕了,答案都在这里了!

● Spring Boot 默认的指标数据从哪来的?

● 技术人面对裁员的终极解决方案-反脆弱

如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!

idea jpa方法 自动提示_Spring Boot的自动配置、Commandline Runner相关推荐

  1. idea没有代码自动提示功能和包自动引入不了问题

    idea没有代码自动提示功能和包自动引入不了问题 原因:节电模式 File -> Power Save Mode (被勾选了) 处理方法: File -> Power Save Mode ...

  2. 禅道外部消息提示_Spring Boot中文参考指南(2.1.6)34、消息传递

    上一篇[33.1.7.Redis] 下一篇[34.3.Apache Kafka 支持] 英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEA ...

  3. springboot 自动装配_Spring Boot 自动装配流程

    Spring Boot 自动装配流程 本文以 mybatis-spring-boot-starter 为例简单分析 Spring Boot 的自动装配流程. Spring Boot 发现自动配置类 这 ...

  4. docker启动后自动退出_Spring Boot项目启动后如何自动执行逻辑

    1. 前言 不知道你有没有接到这种需求,项目启动后立马执行一些逻辑.比如简单的缓存预热,或者上线后的广播之类等等.如果你使用 Spring Boot 框架的话就可以借助其提供的接口CommandLin ...

  5. springboot默认数据源如何设置连接数_Spring Boot系列之配置数据库连接池

    在实际的应用开发中,与数据库交互通常使用数据库连接池来重用Connection对象,减少资源消耗. Spring Boot 的数据源是自动配置的.在 Spring Boot 2.2.1 版本中,有几种 ...

  6. html里如何禁止输入框自动提示,HTML中禁止自动完成和禁用输入法

    原标题:HTML中禁止自动完成和禁用输入法 现在一般浏览器会提供了一个自动完成功能可以记忆我们的输入内容(如登录帐号等),方便下一次快速地录入类似资料.这确实是一个非常友好的功能, 在操作时只需用鼠标 ...

  7. springboot aop使用_Spring Boot 的自动配置,是如何实现的?

    点击上方"IT牧场",选择"设为星标"技术干货每日送达! 作者 | 祖大帅 链接 | juejin.im/post/5b679fbc5188251aad2131 ...

  8. jpa mysql脚本迁移_Spring Boot 数据库迁移:概述

    原标题:Spring Boot 数据库迁移:概述 前言: 在这里的数据库迁移主要是对数据库结构版本管理和迁移. 一.为什么需要数据库迁移工具? 那在没有使用迁移工具的时候,我们会碰到什么呢? (1)多 ...

  9. spring jpa mysql集群_Spring Boot系列之十四 JPA 连接mycat

    接 本文介绍使用spring-data-jpa连接mycat实现应用的读写分离. 系统环境spring-boot 1.4.3-RELEASE jdk1.8 进入正题application.yml配置文 ...

最新文章

  1. rancher2.0安装mysql_高可用rancher集群搭建
  2. nDPI-dev分析
  3. mysql json函数_Mysql里的JSON系列操作函数
  4. 20145234黄斐《java程序设计》第十三周代码检查
  5. jq处理返回来json_(转)JQuery处理json与ajax返回JSON实例
  6. 关天asp.net ajax beta中在updatepnael中注册脚本的解决方案
  7. touch无法创建文件或者文档
  8. archivedDataWithRootObject NSUserDefaults
  9. MYSQL建表语句转换成oracle建表语句
  10. 杭州电子科技大学ACM-1096
  11. ubuntu 13.10 skype登不上问题
  12. Hyperledger/FireFly
  13. 运行npm install时会一直加载转圈
  14. c/c++ 模拟键盘按键按下
  15. ad域时间源配置_Windows Server 2008 R2 域控制器的时间同步配置
  16. 十一、Latex的数学矩阵排版
  17. react版数组遍历
  18. Windows 时间同步
  19. 解决eclipse出现This Android SDK requires Andro...date ADT to the latest version.问题
  20. C语言结构体error: invalid use of incomplet type ‘ struct people’

热门文章

  1. windows上的一些命令和工具
  2. SQL Server日期格式和SQL Server转换举例说明
  3. 函数setState是React的未来
  4. python3 xlsxwiter模块插入matplotlib保存到io.BytesIO中的图
  5. ubuntu16.04安装lua环境
  6. 使用Python进行汽车黑客攻击:泄露GPS和OBDIICAN总线数据
  7. 5个Python特性 越早知道越好的
  8. Python Turtle画分形树理解递归
  9. 零基础入门深度学习(4) - 卷积神经网络
  10. MVC教程第六篇:拦截器