【Spring官方使用文档阅读】

2023-12-29 11:47:57

Spring官方使用文档阅读

代码结构最佳实践

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的方式取决于你所使用的工具。

  • 在Eclipse中,保存一个修改过的文件会导致classpath被更新并触发重启。
  • 在IntelliJ IDEA中,构建项目( Build +→+ Build Project )有同样的效果。
  • 如果使用构建插件,运行Maven的 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.hostspring.devtools.remote.proxy.port 属性。

13.FileSystemWatcher 的工作方式是以一定的时间间隔轮询类的变化,然后等待一个预定义的安静期,以确保不再有变化。 由于Spring Boot完全依赖IDE来编译并将文件复制到Spring Boot可以读取的位置,你可能会发现有时devtools重新启动应用程序时,某些变化并没有反映出来(没有立即生效)。 如果你经常观察到这样的问题,可以尝试增加 spring.devtools.restart.poll-intervalspring.devtools.restart.quiet-period 参数到适合你开发环境的值。

spring.devtools.restart.poll-interval=2s
spring.devtools.restart.quiet-period=1s

受监控的classpath目录现在每2秒轮询一次变化,并保持1秒的安静期以确保没有额外的类变化。

文章来源:https://blog.csdn.net/longqiyuye925/article/details/135285880
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。