1.开发web应用的基础配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
</parent>
<dependencies>
<!-- TOMCAT -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.热部署
2.1 概念
SpringBoot热部署就是在项目正在运行的时候修改代码, 却不需要重新启动项目,大大提高了开发效率,因为频繁的重启项目,势必会浪费很多时间。
2.2 spring-boot-devtools热部署原理
Developers Tools 是一个专门为开发者服务的模块
,其中最重要的功能就是自动将代码更改到最新的 App 上面去 ,也就是我上面所说的 热部署。
(1)当 DevTools 检测到 classpath 下有文件内容变更时,它会对当前 Spring Boot 应用进行重新启动。
(2)它并不是完全重启,而是对程序有影响的部分进行重启,所以它比我们一般的重启要快很多。
(3)DevTools 默认将只在开发环境生效,通过 Spring Boot 插件打包时默认是不会包含 DevTools ,所以小伙伴们可以放心的使用。
(4)默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。
2.3 spring-boot-devtools热部署步骤
(1)pom文件中导入 spring-boot-devtools
<!--SpringBoot热部署配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<!--optional=true 依赖不会传递,该项目依赖devtools之后依赖该项目的项目如果想要使用devtools,需要重新导入-->
<optional>true</optional>
</dependency>
另外一个方法是新建SpringBoot项目时勾选DevTools选项,自动引入:
(2)Maven插件配置热部署
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 热部署设置为true -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
(3)IDEA配置
当我们修改了Java类后,IDEA默认是不自动编译的,而spring-boot-devtools又是监测classpath下的文件发生变化才会重启应用,所以需要设置IDEA的自动编译,具体设置方法:
Ctrl+Shift+Alt+/,选择Registry,点击进入后,勾选compiler.automake.allow.when.app.running后关闭即可
配置好重启IDEA
2.4 spring-boot-devtools热部署效果
- 修改java类–>保存:应用会重启
- 修改配置文件–>保存:应用会重启,比如修改application.yml文件
- 修改页面–>保存:应用不会重启,但会重新加载,页面会刷新,比如修改html文件
2.5 关闭热部署
spring:
devtools:
restart:
#热部署生效
enabled: true
2.6 spring-boot-devtools扩展
(1)从自动重新加载中排除资源
除了默认情况下几个文件夹下的文件修改不会使应用重启,如果想要自定义不触发restart的目录
//排除文件夹
spring.devtools.restart.exclude=static/**,public/**
//排除文件
spring:
devtools:
restart:
exclude: application.yml
以上方式是排除了默认目录,定义了指定的目录。如果你先在保持默认目录的情况下,新增一些其他的不触发目录,则通过spring.devtools.restart.additional-exclude属性设置。
spring.devtools.restart.additional-exclude=styles/**
(2)排除其他路径
可能有少量文件不在classpath中,但您仍然可能需要查看这些addtional文件/路径以重新加载应用程序。为此,请使用该spring.devtools.restart.additional-paths属性。
同样,如果您想保留这些默认值并添加其他排除项,请改用该spring.devtools.restart.additional-exclude属性。
(3)静态资源缓存
为了提高性能,开发工具缓存静态内容/模板文件以更快地为浏览器/客户端提供服务,但是在开发环境中,它可能会成为问题并导致缓存问题,并且您可能无法在浏览器中立即看到您的更改。如thymeleaf, freemarker, groovy等
#spring.freemarker.cache = true //生产环境设置为true
spring.freemarker.cache = false //开发环境设置为false,默认false
//Other such properties
spring.thymeleaf.cache = false
spring.mustache.cache = false
spring.groovy.template.cache = false
(4)手工触发重启,改代码不重启,通过一个文本去控制
自动重新启动可能需要每次文件更改,有时由于频繁重新启动,可能会缩短开发时间。为了解决这个问题,你可以使用一个触发文件。Spring引导将继续监视该文件,一旦它检测到该文件中的任何修改,它将重新启动服务器并重新载入您以前的所有更改。使用spring.devtools.restart.trigger-file属性来提供您的应用程序的触发器文件。它可以是任何外部或内部文件。
spring.devtools.restart.trigger-file = c:/restart-trigger.txt
3.设置SpringBoot应用程序
使用内嵌容器时,需要设置SpringBoot应用程序。主类中包含@SpringBootApplication注释,相当于@EnableAutoConfiguration,@ComponentScan,@SpringBootConfiguration三者的集合。
- @SpringBootConfiguration:继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
- @EnableAutoConfiguration:启用Spring Boot的自动配置机制,如配置数据源,实体管理器工厂,事务管理器等可以省略。
- @componentscan:@Service,@Repository,@Component,@Controller用来定义一个bean,@ComponentScan注解就是用来自动扫描被这些注解标识的类,最终生成ioc容器里的bean
@SpringBootApplication
@ConfigurationProperties
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
4. Springboot的全局配置文件:application.properties
开发过程中会遇到这样的需求,比如容器访问端口,设置项目访问别名,设置数据库连接配置(database),设置开发环境配置,部署环境配置,实现两者之间的无缝切换。
//http://localhost:6666/springboot1即可访问到我们的项目
server.port=6666
server.context-path=/springboot1
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=secret
server.ssl.key-password=another-secret
5.controller 的注解
springboot为我们提供了三个注解:@Controller、@RestController、@ResponseBody。
@RestController 是spring 4 新加的注解,相当于@Controller+@ResponseBody。在方法上面不用使用@ResponseBody。
@Controller 必须
6.Intellij IDEA 启动 Spring boot 项目在Run中启动没问题 ,Debug启动缓慢卡住 解决方式
一般情况由于启动断点过多的形式,需在IDEA一下去除断点,具体操作: