第七部分:运行你的程序
最大的优势将你的程序打包成一个jar包运行在任何HTTPserver容器中。调试Springboot也非常简单,你不要任何特殊的IDE插件或者扩展。
1:从IDE中运行
你可以在你的IDE上作为一个简单的项目来运行spring boot程序,然而,第一布需要导入你的项目。导入的步骤依赖于你的IDE和编译系统不同而不同。许多IDE都支持导入maven项目。例如Eclipse用户可以从菜单中选择 Existing Maven Projects来导入。
2:打包运行
如果你使用Spring boot的maven或者grade插件来打成一个可执行的jar包,你可以使用java -jar来运行。例如
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
你可以通过远程debug模式来运行,这依附于一个调试工具来调试
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar target/myproject-0.0.1-SNAPSHOT.jar
3:使用maven插件
spring boot 的maven插件提供了一个运行目标来快速编译和运行程序。应用程序运行在一个爆炸的形式就像在你的IDE。
$ mvn spring-boot:run
你可能还需要一些有用的环境变量
$ export MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=128M -Djava.security.egd=file:/dev/./urandom
第八部分:开发工具
spring boot提供一些额外的工具,在编译你的程序时会更愉快。这个spring-boot-devtools 模型可以被引入到项目中来增加调试特性。为了引入支持,可以在build中简单地引入模型。
org.springframework.boot spring-boot-devtools true
1:默认值
spring boot的一些包使用缓存来提高性能。例如,Thymeleaf会缓存模板用来保存反复解析XML源文件。同时,缓存是一个非常有用的产品,在开发中可以被多次使用。如果在你的IDE中模板文件改变了,你很可能直接想去看结果。
缓存选项通常配置在application.properties文件中。例如,Thymeleaf提供一个spring.thymeleaf.cache 属性。为了不去手动的配置这些属性,spring-boot-devtools模型会自动应用development-time配置。
2:自动重启
使用spring-boot-devtools模型的程序,如果在类路径中有任何文件改变就会自动重启。作为一个代码变动的反馈,这IDE中是非常有用的一项。默认情况下,类路径中任何文件夹都会被监控。注意某些静态资源和模板变动是不需要重启程序的。
触发重启
作为一个DevTools的类路径资源监视器,唯一的方式就是更新类路径来触发重启。具体使用哪一种方式来更新类路径取决于你使用的IDE。在Eclipse中,保存一个修改的文件会触发重启。在Intellij IDEA中,编译文件时(Build # Make Project)会有相同效果。
1:将资源文件排除在外
某些资源文件改变时并不需要触发重启。例如,Thymeleaf的模板文件只能就地编辑。默认情况下,改变/META-INF/maven, /META-INF/resources ,/resources ,/static ,/public 或者 /templates目录中文件不会触发重启,但会触发热部署。如果你想把这些排除在外的话,你可以使用spring.devtools.restart.exclude的属性。例如,仅将/static和/public排除在外,你可以使用如下配置。
spring.devtools.restart.exclude=static/**,public/**
2:查看额外的路径
你可能想当某些文件不在类路径中发生改变时来重启或重新部署你的程序。为了达到如此,你可以使用spring.devtools.restart.additionalpaths属性来配置额外的路径观看。你也可以使用spring.devtools.restart.exclude属性,它被描述成完全控制在额外路径之下来触发重启或者热部署。
3:使重启失效
如果你不想使用重启你可以通过spring.devtools.restart.enabled属性来关闭。和许多案例一样,你可以在application.properties (这个仍然初始化重启类加载,但不会去监视文件改变)中设置。
如果你想完全的禁用重启特性,例如,对于一些特殊的库,你需要在调用 SpringApplication.run(…)之前设置系统变量,例如
public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(MyApp.class, args);}
4:使用一个触发文件
如果你使用的IDE会连续不断的编译改变的文件,你可能会更想在特殊时刻来触发重启。为了达到此目的,你可以使用一个‘trigger file’,它是一个能够改变并触发你想要的重启时刻。这个触发文件可以被手动改变,也可以通过IDE插件改变。
使用spring.devtools.restart.trigger-file属性来使用触发文件
5:定制重启的类加载器
对于大多数情况下,restart能够很好工作。但是,它能引起类加载问题。默认情况下,在你的IDE中所有被打开的项目都是使用‘restart’类加载来加载。
所有调整的.jar文件都会使用‘base’类加载来加载。如果你在一个项目里含有多个模型中工作,并且不是所有的模型多导入到你的IDE,你需要定制这些东西。
为了达到此目标,你需要创建一个META-INF/spring-devtools.properties文件。
这个spring-devtools.properties文件包含了restart.exclude.和restart.include.前缀属性。这个include元素代表加入的条目需在’restart‘类加载之上,exclude元素代表加入的条目需在’base‘类加载之下。这个属性值是一个正则表达式会应用到类路径中。
例如:
restart.include.companycommonlibs=/mycorp-common-[\\w-]+\.jarrestart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar
6:了解一些局限性
重启功能并不适合那些被反序列化的对象输入流。如果你想反序列化数据,你可能需要使用spring的ConfigurableObjectInputStream结合Thread.currentThread().getContextClassLoader()。不幸的是,一些第三方库反序列化不在上下文类加载考虑中。如果你遇到这些问题,请联系原创作者。
热部署
这个spring-boot-devtools模型包含一个嵌入的热部署服务,它被用来触发浏览器刷新当一个资源被改变时。热部署浏览器友好的扩展了谷歌、火狐和safari浏览器。如果你的程序不想使用热部署,你可以将spring.devtools.livereload.enabled 属性设置为false来禁用。
全局设置
你可以通过在你的home文件夹中添加一个.spring-bootdevtools.properties 文件来配置devtools的设置(注意这个文件名是以.开头的)。所有被添加到这个文件的属性都会被应用到使用devtoll的Spring Boot的程序中。例如,配置重启通常使用一个触发文件,那么就得这么配置:
在~/.spring-boot-devtools.properties文件中添加
spring.devtools.reload.trigger-file=.reloadtrigger
远程程序
Spring Boot开发工具并不局限于本地程序,也可以在远程程序上使用一些特性。远程是选择性加入的,为使用它你需添加spring.devtools.remote.secret属性。比如
spring.devtools.remote.secret=mysecret