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数据库连接!
- com.h2database
启动项目
右键单击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语句处理可能遇到的异常。