继承 starter parent ?
继承的话:
如果你想配置项目,让其继承自spring-boot-starter-parent
,只需将parent
按如下设置:
1 | <!-- Inherit defaults from Spring Boot --> |
注:你应该只需在该依赖上指定Spring Boot版本,如果导入其他的starters,放心的省略版本号好了。
按照以上设置,你可以在自己的项目中通过覆盖属性来覆盖个别的依赖。例如,你可以将以下设置添加到pom.xml
中来升级Spring Data到另一个发布版本。
1 | <properties> |
注 查看spring-boot-dependencies pom获取支持的属性列表。
spring-boot-starter-parent
选择了相当保守的Java兼容策略,如果你遵循我们的建议,使用最新的Java版本,可以添加一个java.version
属性:
1 | <properties> |
Spring Boot包含一个[Maven插件](../VIII. Build tool plugins/58. Spring Boot Maven plugin.md),它可以将项目打包成一个可执行jar。如果想使用它,你可以将该插件添加到<plugins>
节点处:
1 | <build> |
注:如果使用Spring Boot starter parent pom,你只需添加该插件而无需配置它,除非你想改变定义在partent中的设置。
不继承starter parent的话:
不是每个人都喜欢继承spring-boot-starter-parent
POM,比如你可能需要使用公司的标准parent,或只是倾向于显式声明所有的Maven配置。
如果你不想使用spring-boot-starter-parent
,通过设置scope=import
的依赖,你仍能获取到依赖管理的好处:
1 | <dependencyManagement> |
以上设置不允许你使用属性覆盖个别依赖,为了达到这个目的,你需要在项目的dependencyManagement
节点中,在spring-boot-dependencies
实体前插入一个节点。例如,为了将Spring Data升级到另一个发布版本,你需要将以下配置添加到pom.xml
中:
1 | <dependencyManagement> |
注 示例中,我们指定了一个BOM,但任何的依赖类型都可以通过这种方式覆盖
远程调试
如果使用Spring Boot Maven或Gradle插件创建一个可执行jar,你可以使用java -jar
运行应用。例如:
1 | $ java -jar target/myproject-0.0.1-SNAPSHOT.jar |
Spring Boot支持以远程调试模式运行一个打包的应用,下面的命令可以为应用关联一个调试器:
1 | $ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \ |
Java的远程调试在诊断远程应用问题时很有用,不幸的是,当应用部署在你的数据中心外时,它并不总能够启用远程调试。如果你使用基于容器的技术,比如Docker,远程调试设置起来非常麻烦。
为了突破这些限制,devtools支持基于HTTP的远程调试通道。远程客户端在8000端口提供一个本地server,这样远程debugger就可以连接了。一旦连接建立,调试信息就通过HTTP发送到远程应用。你可以使用spring.devtools.remote.debug.local-port
属性设置不同的端口。
你需要确保远程应用启动时开启了远程调试功能,通常,这可以通过配置JAVA_OPTS
实现,例如,对于Cloud Foundry,你可以将以下内容添加到manifest.yml:
1 | --- |
注 注意你不需要传递一个address=NNNN
的配置项到-Xrunjdwp
,如果遗漏了,java会使用一个随机可用端口。
调试基于Internet的远程服务可能很慢,你可能需要增加IDE的超时时间。例如,在Eclipse中你可以从Preferences…
选择Java
-> Debug
,改变Debugger timeout (ms)
为更合适的值(60000在多数情况下就能解决)。