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

点击上方☝ 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>
15
16    <properties>
17        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
18        <java.version>1.8java.version>
19    properties>
20
21    <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>
41
42    <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启动应用程序,如下图所示。

770af5fa7eb7848566c5405e619a1b5b.png

可以看到类似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    @Override
10    public void run(String... strings) throws Exception {
11        logger.info("hello");
12    }
13}
  • 在BookPubApplication类中创建bean对象,代码如下:

1    @Bean
2    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语句处理可能遇到的异常。

c8029b1ae4072ad2f391ad153caae8f0.gif

● SpringRetry重试机制

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

● Java 文件处理 Paths & Files

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

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

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

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

cf9c91c1dee92c597d4d587cffb67880.png

e4dcbeabd15c1ddc7974e3e6868d238d.gif

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值