文章目錄
  1. 1. 一、在SpringBoot使用热部署
    1. 1.1. 1.1 SpringBoot pom.xml配置
    2. 1.2. 1.2 设置IDEA编译行为
  2. 2. 二、SpringBoot与Velocity整合
    1. 2.1. 2.1 配置pom.xml
    2. 2.2. 2.2 测试Velocity
    3. 2.3. 2.3 出错注意点
  3. 3. 三、使用Velocity布局模版

摘要:配置SpringBoot的Maven插件,使SpringBoot项目有热部署功能。与IDEA搭配实现SpringBoot项目自动编译后热部署,并且初步使用Velocity操作。

一、在SpringBoot使用热部署

1.1 SpringBoot pom.xml配置

 在我们开发过程中,我们需要经常修改,为了避免重复启动项目,我们可以启用热部署。
 Spring-Loaded项目提供了强大的热部署功能,添加/删除/修改 方法/字段/接口/枚举 等代码的时候都可以热部署,速度很快,很方便。
 当然,它也有一些小缺限:

  • 对于一些第三方框架的注解的修改,不能自动加载,比如:SpringMVC的@RequestMapping
  • log4j的配置文件的修改不能即时生效。

 想在Spring Boot中使用该功能非常简单,就是在spring-boot-maven-plugin插件下面添加依赖:

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
</dependencies>

 添加以后,通过mvn spring-boot:run启动就支持热部署了。
 注意:使用热部署的时候,需要IDE编译类后才能生效,你可以打开自动编译功能,这样在你保存修改的时候,类就自动重新加载了。
 通过在IDEA下面的终端中运行mvn spring-boot:run命令:
Alt text
 如果出现:

[INFO] Attaching agents: [**/1.2.5.RELEASE/springloaded-1.2.5.RELEASE.jar]

 说明你的Spring-loaded插件已经加载完毕,能够使用。

1.2 设置IDEA编译行为

 在IDEA中,编译代码的快捷键是Ctrl+Shift+F9,在Mac OS X上为Command+Sshift+F9
 这边使用IDEA中的Macros方式来实现保存即编译的过程,方式如下:

    1. Edit -> Macros -> Start Macro Recording
    1. Click File -> Save All(或者Command/Ctrl+S)
    1. Build -> Compile(或者Command/Ctrl+Sshift+F9)
    1. Edit -> Macros -> Stop Macro Recording

 保存Macros,名为:Save&Compile
 打开KeyMap,将原先的Save+all快捷键Command/Ctrl+S移除
Alt text
 在Keymap中找到Macros文件夹下的Save&Compile快捷键,将其设置为Command/Ctrl+S即可。
Alt text

二、SpringBoot与Velocity整合

2.1 配置pom.xml

只需在pom.xml文件中加入一下xml即可(如果之前使用IDEA创建SpringBoot项目时有选择Templates中的Velocity,则该步骤可省略)

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-velocity</artifactId>
</dependency>

2.2 测试Velocity

在resourse/templates目录下新建velocity文件,如下图所示:
Alt text
测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
* TestVelocity
* Created by huangguoxin on 16/6/3.
*/

@Controller
@RequestMapping("/VelocityTest")
public class VelocityTest {

@RequestMapping("/VelocityTest")
public String helloVelocity(Map<String,Object> model){
//将数据存放map里面,可以直接在velocity页面,使用key访问
List<String> l= new ArrayList();
l.add("1");
l.add("2");
l.add("3");
l.add("4");
l.add("5");
l.add("6");
//将数据存放map里面,可以直接在velocity页面,使用key访问
model.put("data",l);

return "/templates/hello";//也可以写成return "hello"
}
}

2.3 出错注意点

  1. 如果使用@RestController注解实现这个Contrller的话,返回的Json格式的数据,而不经过Velocity,无法输出你想要的数据。
  2. 配置application.properties,如下
1
2
3
4
5
6
7
spring.velocity.resourceLoaderPath=classpath:/templates/
spring.velocity.prefix=
spring.velocity.suffix=.vm
spring.velocity.cache=false
spring.velocity.check-template-location=true
spring.velocity.charset=UTF-
spring.velocity.content-type=text/html

三、使用Velocity布局模版

在SpringBoot中使用Velocity模版,需要生成一个名为velocityViewResolver的Bean,并将其配置,才能在SpringBoot中使用布局模版。
一下内容摘自SpringBoot官网SpringBootDocs

By default, Spring Boot configures a VelocityViewResolver. If you need a VelocityLayoutViewResolver instead, you can easily configure your own by creating a bean with name velocityViewResolver. You can also inject the VelocityProperties instance to apply the base defaults to your custom view resolver.
The following example replaces the auto-configured velocity view resolver with a VelocityLayoutViewResolver defining a customized layoutUrl and all settings that would have been applied from the auto-configuration:

1
2
3
4
5
6
7
@Bean(name = "velocityViewResolver")
public VelocityLayoutViewResolver velocityViewResolver(VelocityProperties properties) {
VelocityLayoutViewResolver resolver = new VelocityLayoutViewResolver();
properties.applyToViewResolver(resolver);
resolver.setLayoutUrl("layout/default.vm");
return resolver;
}

通过配置该Bean就能使用Velocity Layout模版,以下是我自己的Config

1
2
3
4
5
6
7
8
9
10
@Configuration
public class VelocityConfig {
@Bean(name = "velocityViewResolver")
public VelocityLayoutViewResolver velocityViewResolver(VelocityProperties velocityProperties) {
VelocityLayoutViewResolver resolver = new VelocityLayoutViewResolver();
velocityProperties.applyToViewResolver(resolver);
resolver.setLayoutUrl("layout/default.vm");
return resolver;
}
}

文章目錄
  1. 1. 一、在SpringBoot使用热部署
    1. 1.1. 1.1 SpringBoot pom.xml配置
    2. 1.2. 1.2 设置IDEA编译行为
  2. 2. 二、SpringBoot与Velocity整合
    1. 2.1. 2.1 配置pom.xml
    2. 2.2. 2.2 测试Velocity
    3. 2.3. 2.3 出错注意点
  3. 3. 三、使用Velocity布局模版