构建代码
不推荐使用默认的package可能会导致 Spring Boot applications 在使用@ComponentScan,@EntityScan,@SpringBootApplication 时出现问题.
我们建议您遵循Java推荐的软件包命名约定,并使用颠倒的域名(例如com.example.project)。
建议通常将主应用类放在其他类的根包中,这样可以使用@SpringBootApplication
注解来代替以下三个注解@EnableAutoConfiguration
@ComponentScan
@EnableAutoConfiguration
一个典型的目录
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
配置类
Spring Boot支持基于Java的配置。虽然可以使用xml调用SpringApplication.run()
,但我们通常建议主要使用@Configuration
的类。通常,定义main方法的类也是一个很好的@Configuration
候选者。
在互联网上已经发布了许多使用XML配置的Spring配置示例。如果可能,请始终尝试使用基于Java的等效配置。搜索Enable*注释可能是一个很好的起点。
@ComponentScan
可以自动获取所有的spring组件,包括@Configuration
类.
你只能添加一个@EnableAutoConfiguration注释。我们通常建议您将其添加到您的主@Configuration类。
禁用特定的自动配置
使用@EnableAutoConfiguration
来禁用
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
Spring Beans 和 依赖注入
通常使用@ComponentScan
来查找bean
,并配合@Autowired
来实现注入.
一个使用@Server
Bean的例子
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
注释
使用@SpringBootApplication
注解来代替以下三个经常在一起使用的注解@EnableAutoConfiguration
@ComponentScan
@EnableAutoConfiguration
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
运行程序
将应用程序打包为jar的最大优点之一就是您可以像运行其他应用程序一样运行应用程序使用嵌入式HTTP服务器。调试Spring Boot应用程序也很容易; 你不需要任何特殊的IDE插件或扩展。
如果您选择将应用程序打包为war文件,则应参考您的服务器和IDE文档。
Running as a packaged application
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
使用SpringBootMaven或者Gradle 插件来创建它.
使用Maven插件
Spring Boot Maven插件包含一个run可用于快速编译和运行应用程序的目标。应用程序以分解形式运行,就像在IDE中一样。
$ mvn spring-boot:run
您可能还想使用有用的操作系统环境变量:
$ export MAVEN_OPTS = -Xmx1024m -XX:MaxPermSize = 128M
使用Gradle插件
Spring Boot Gradle插件还包含一个可以使用分解的方式运行您的应用程序的bootRun
任务.他将在导入spring-boot-gradl-plugin
时被加入.
$ gradle bootRun
您可能也想使用这个有用的操作系统环境变量:
$ export JAVA_OPTS=-Xmx1024m -XX:MaxPermSize=128M
Hot swapping
由于Spring Boot应用程序只是普通的Java应用程序,所以JVM热插拔应该是开箱即用的.JVM热交换在某种程度上受限于它可以替换的字节码,为了获得更完整的解决方案, 可以使用JRebel或者Spring Loaded . spring-boot-devtools
模块还包括支持快速重新启动应用程序
20.开发工具
Spring Boot包含一组额外的工具,可以使应用程序开发体验更愉快。该spring-boot-devtools
模块可以包含在任何项目中以提供额外的开发时间功能。要包含devtools支持,只需将模块依赖关系添加到您的版本:
Maven
org.springframework.boot
spring-boot-devtools
true
Gradle
dependencies {
compile("org.springframework.boot:spring-boot-devtools")
}
运行完整打包的应用程序时,开发人员工具会自动禁用 如果您的应用程序是使用
java -jar
特殊的类加载器启动的,或者它是使用特殊的类加载器启动的,那么它被认为是生产应用程序。将依赖关系标记为可选项是一种最佳实践,可以防止devtools通过项目传递到其他模块。Gradle并不支持optional
开箱即用的依赖关系,因此您可能需要查看propdeps-plugin的相关内容 。
属性默认值
缓存选项通常由application.properties
文件中的设置进行配置。不需要手动设置这些属性,spring-boot-devtools
模块将自动应用合理的开发时间配置.
有关应用的属性的完整列表,请参阅DevToolsPropertyDefaultsPostProcessor
自动重启
使用spring-boot-devtools
的程序会在文件被改变后自动重启.请注意,某些资源(如静态资产和视图模板)不需要重新启动应用程序
触发重启
在Eclipse中,保存修改后的文件将导致类路径更新并触发重启。在IntelliJ IDEA中,构建项目(Build -> Make Project)将具有相同的效果。
远程应用程序
Spring Boot开发者工具不仅限于本地开发。您还可以在远程运行应用程序时使用多个功能。远程支持是选择性的,为了启用它,您需要确保devtools
包含在重新打包的存档中