1.建议你遵循Java推荐的包的命名惯例,使用域名反转作为包名(例如, com.example.project
)
2.项目的典型布局如下:
com
+- example
+- myapplication
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
建议你将你启动类放在一个根package中,高于其他的类,@SpringBootApplication
注解一般都是注解在启动类上的。它默认会扫描当前类下的所有子包。例如,如果你正在编写一个JPA应用程序,你的 @Entity
类只有定义在启动类的子包下才能被扫描加载到。这样的好处也显而易见,@SpringBootApplication
默认只会扫描加载你项目工程中的组件。
3.网上有很多关于“通过XML配置Spring”的示例,如果可以的话,还是尽量使用Java代码的方式来实现相同的配置。你可以尝试着搜索 Enable*
注解
4.如果你确实需要使用基于XML的配置,我们建议你仍然从 @Configuration
类开始,然后通过 @ImportResource
注解来加载XML配置文件。
@Configuration
@ImportResource(locations = {"classpath:bean.xml"})
public class BeanConfig2 {
}
private final RiskAssessor riskAssessor;
上面示例中通过构造器注入的 riskAssessor
字段被标识为了 final
,表示一旦Bean创建这个字段就不被改变了。这也是我们推荐的做法。
6.许多Spring Boot开发者希望他们的应用程序能够使用自动配置、组件扫描,并且能够在他们的 "application class "上定义额外的配置。 一个 @SpringBootApplication
注解就可以用来启用这三个功能,如下。
@EnableAutoConfiguration
:启用Spring Boot的自动配置机制。@ComponentScan
:对应用程序所在的包启用 @Component
扫描(见最佳实践)。@SpringBootConfiguration
:允许在Context中注册额外的Bean或导入额外的配置类。这是Spring标准的 @Configuration
的替代方案,有助于在你的集成测试中检测配置。7.如果你的应用程序是通过 java -jar
启动的,或者是从一个特殊的classloader启动的,那么它就被认为是一个 “生产级别的应用程序”,开发者工具会被自动禁用。 你可以通过 spring.devtools.restart.enabled
配置属性来控制这一行为。 要启用devtools,无论用于启动应用程序的类加载器是什么,请设置启动参数 -Dspring.devtools.restart.enabled=true
。 在生产环境中不能这样做,因为运行devtools会有安全风险。 要禁用devtools,请删除该依赖或者设置启动参数 -Dspring.devtools.restart.enabled=false
。
8.如果你不想使用重启功能,你可以通过使用 spring.devtools.restart.enabled
属性来禁用它。在大多数情况下,你可以在你的 application.properties 中设置这个属性(这样做仍然会初始化restart 类加载器,但它不会监控文件变化)。
如果你需要完全禁用重启支持(例如,因为它不能与特定的库一起工作),你需要在调用 SpringApplication.run(…)
之前将 spring.devtools.restart.enabled
属性设置为 false ,如下面的例子中所示。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApplication.class, args);
}
}
9.触发重启
由于DevTools监控classpath资源,触发重启的唯一方法是更新classpath。 无论你使用的是IDE还是构建插件,被修改的文件都必须被重新编译以触发重启。 导致更新classpath的方式取决于你所使用的工具。
Build +→+ Build Project
)有同样的效果。mvn compile
或Gradle的 gradle build
会触发重启。spring-boot-devtools
模块包括一个内嵌的LiveReload服务器,可以用来在资源发生变化时触发浏览器刷新。LiveReload浏览器扩展可以从 livereload.com免费获得,支持Chrome、Firefox和Safari。
如果你不想在应用程序运行时启动LiveReload服务器,你可以将 spring.devtools.livereload.enabled
属性设置为 false
远程客户端应用程序被设计成可以在你的IDE中运行。 你需要运行 org.springframework.boot.devtools.RemoteSpringApplication
,其classpath与你所连接的远程项目相同。 该应用程序的唯一必要参数是它所连接的远程URL。
例如,如果你使用的是 Eclipse 或 Spring Tools,并且你有一个名为 my-app
的项目,并已将其部署到 Cloud Foundry,你可以执行以下操作。
Run
菜单中选择 Run Configurations…
。Java Application
“launch configuration”。my-app
项目。org.springframework.boot.devtools.RemoteSpringApplication
作为main类。Program arguments
中添加 https://myapp.cfapps.io
(或者你的远程URL)。12.始终建议使用 https://
作为连接协议,这样流量会被加密,密码也不会被截获。如果你需要使用代理来访问远程应用程序,可以配置 spring.devtools.remote.proxy.host
和 spring.devtools.remote.proxy.port
属性。
13.FileSystemWatcher 的工作方式是以一定的时间间隔轮询类的变化,然后等待一个预定义的安静期,以确保不再有变化。 由于Spring Boot完全依赖IDE来编译并将文件复制到Spring Boot可以读取的位置,你可能会发现有时devtools重新启动应用程序时,某些变化并没有反映出来(没有立即生效)。 如果你经常观察到这样的问题,可以尝试增加 spring.devtools.restart.poll-interval
和 spring.devtools.restart.quiet-period
参数到适合你开发环境的值。
spring.devtools.restart.poll-interval=2s
spring.devtools.restart.quiet-period=1s
受监控的classpath目录现在每2秒轮询一次变化,并保持1秒的安静期以确保没有额外的类变化。