import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
如果这个类不在类路径中,你可以使用这个注解的 excludeName
属性并指定全限定名来代替。最后,你也可以通过 spring.autoconfigure.exclude
属性来排除,从而控制自动配置类的列表。
package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
@Autowired
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
如果一个 bean 有一个构造函数,可以省略 @Autowired
,如下面示例所示:
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
@SpringBootApplication
注解等价于使用 @Configuration
、@EnableAutoConfiguration
和 @ComponentScan
以及它们的默认属性,如下面的示例所示:
package com.example.myapplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@EnableAutoConfiguration
@Import({ MyConfig.class, MyAnotherConfig.class })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
在这个例子中,Application
就像一些其它 Spring Boot 应用程序一样,除了 @Component
注解类不会自动发觉,用户指定的 bean 都会明确的导入 (参见 @Import
)。
Spring Boot Maven 插件包含一个 run
项,可以用来快速编译和运行你的应用。应用就像在 IDE 中一样快速运行。下面的示例展示了一个典型的 Maven 命令运行一个 Spring Boot 应用:
$ mvn spring-boot:run
你可能还想使用 MAVEN_OPTS
操作系统环境变量,如下面的示例所示:
$ export MAVEN_OPTS=-Xmx1024m
Spring Boot Gradle 插件也包含一个 bootRun
任务,它可以用来以解压形式运行你的应用。当你应用 org.springframework.boot
和 java
插件时会添加 bootRun
任务,如下面的示例所示:
$ gradle bootRun
你可能还想使用 JAVA_OPTS
操作系统环境变量,如下面的示例所示:
$ export JAVA_OPTS=-Xmx1024m
Spring Boot 包含额外的工具集合,可以使应用开发的过程更方便一点。spring-boot-devtools
模块可以包含进任何工程,用来提供额外的程序调试特性。为了添加工具支持,简单的添加模块依赖到你的构建系统中,如下面的 Maven 和 Gradle 清单所示:
Maven.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
Gradle.
dependencies {
compile("org.springframework.boot:spring-boot-devtools")
某些资源不一定需要在更改时触发重新启动。例如,Thymeleaf 模板可以就地编辑。默认情况下,/META-INF/maven
、/META-INF/resources
、/resources
、/static
、/public
或 /templates
中资源的改变不会触发重启,但会触发实时重载。如果你想定制这些排除项,你可以使用 spring.devtools.restart.exclude
属性。例如,仅排除 /static
和 /public
,设置如下:
spring.devtools.restart.exclude=static/**,public/**
如果你需要完全禁用重启支持,例如,因为它不能与一个特定的库一起工作,你需要在调用 SpringApplication.run(…)
之前设置一个 System
属性为 false
。如下面的示例所示:
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApp.class, args);
spring-devtools.properties
文件可以包含 restart.exclude.
和 restart.include.
前缀属性。include
元素应该拉进重启类加载器中,exclude
元素应该推入到基类加载器中。该属性值是应用到类路径中的一个正则表达式,如下面的示例所示:
restart.exclude.companycommonlibs=/mycorp-common-[\\w-]+\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar
通过添加一个名为 .spring-boot-devtools.properties
的文件到你的 $HOME
文件夹中(注意文件名以 “.” 开头),你可以配置全局开发者工具设置。任何添加到这个文件的属性都将应用到你机器上所有使用开发者工具的 Spring Boot 应用中。例如,为了配置重启时总是使用一个触发文件,你需要添加如下内容:
~/.spring-boot-devtools.properties.
spring.devtools.reload.trigger-file=.reloadtrigger
Spring Boot 开发者工具是不受本地环境限制的,在运行远程应用时你也可以使用一些功能。远程支持是选择性加入的,为了使它起作用你需要确保 devtools
包含在再打包的文件中,如下面清单所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeDevtools>false</excludeDevtools>
</configuration>
</plugin>
</plugins>
</build>
然后你需要设置 spring.devtools.remote.secret
属性,如下面的示例所示:
spring.devtools.remote.secret=mysecret
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
\\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
=========|_|==============|___/===================================/_/_/_/
:: Spring Boot Remote :: 2.1.0.BUILD-SNAPSHOT
2015-06-10 18:25:06.632 INFO 14938 --- [ main] o.s.b.devtools.RemoteSpringApplication : Starting RemoteSpringApplication on pwmbp with PID 14938 (/Users/pwebb/projects/spring-boot/code/spring-boot-devtools/target/classes started by pwebb in /Users/pwebb/projects/spring-boot/code/spring-boot-samples/spring-boot-sample-devtools)
2015-06-10 18:25:06.671 INFO 14938 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2a17b7b6: startup date [Wed Jun 10 18:25:06 PDT 2015]; root of context hierarchy
2015-06-10 18:25:07.043 WARN 14938 --- [ main] o.s.b.d.r.c.RemoteClientConfiguration : The connection to http://localhost:8080 is insecure. You should use a URL starting with 'https://'.
2015-06-10 18:25:07.074 INFO 14938 --- [ main] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2015-06-10 18:25:07.130 INFO 14938 --- [ main] o.s.b.devtools.RemoteSpringApplication : Started RemoteSpringApplication in 0.74 seconds (JVM running for 1.105)