在现代Java Web应用开发中,Spring Boot是一个越来越受欢迎的框架。它简化了基于Spring的应用开发,通过提供嵌入式的Web服务器,使得应用部署变得异常简单。本文将介绍如何使用Spring Boot构建一个包含嵌入式容器的Java应用程序,包括Maven依赖、启动应用、添加控制器、配置以及如何服务静态内容。
要构建一个Spring Boot应用,首先需要定义Maven的依赖。以下是一个简单的pom.xml
文件示例,它包含了构建和打包Spring Boot应用所需的最小Maven依赖。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.song.example</groupId>
<artifactId>spring-boot-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<spring-boot.version>1.5.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<finalName>${artifactId}-${version}</finalName>
<mainClass>${start-class}</mainClass>
<addResources>true</addResources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
在这个例子中,spring-boot-starter-web
是编译Spring Boot应用的唯一Maven依赖;而spring-boot-maven-plugin
插件则是Maven打包Spring Boot应用所必需的。
要启动一个Spring Boot应用,可以创建一个类,该类继承自SpringBootServletInitializer
并使用@SpringBootApplication
注解。以下是一个示例:
package com.song.web.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan({
"com.song.web.boot",
"com.song.web.controller"
})
public class ApplicationStart extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(ApplicationStart.class, args);
}
}
@ComponentScan
注解告诉Spring Boot需要扫描的包,以查找Spring组件和控制器。
在Spring Boot中,典型的Spring MVC控制器同样适用。控制器类需要位于@ComponentScan
路径中。以下是一个示例控制器:
package com.song.web.controller;
import java.util.HashMap;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ExampleController {
@RequestMapping(value = "/getAJson", method = RequestMethod.GET)
@ResponseBody
public HashMap<String, String> getAJson() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("Sprint", "boot");
return map;
}
}
在这个示例控制器中,实现了一个简单的REST服务,它将在GET请求时响应一个HashMap
。
要配置Spring Boot应用,可以创建一个被@Configuration
注解的类,类中的每个@Bean
方法提供一个配置项。以下是一个示例配置类:
package com.song.web.boot;
import javax.servlet.Filter;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.song.web.filter.NocacheFilter;
@Configuration
public class ServletConfig {
@Bean
public EmbeddedServletContainerCustomizer portCustomizer() {
return (container -> { container.setPort(8090); });
}
@Bean
public FilterRegistrationBean noCacheFilter() {
Filter filter = new NocacheFilter();
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(1);
return registration;
}
}
portCustomizer()
方法告诉应用监听8090端口;noCacheFilter()
方法告诉应用对所有Web请求应用一个过滤器。
要在Spring Boot应用中服务静态内容,可以将静态内容添加到src/main/resources/static
文件夹中。以下是一个示例配置,它确保静态内容被打包到JAR文件中:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<finalName>${artifactId}-${version}</finalName>
<mainClass>${start-class}</mainClass>
<addResources>true</addResources>
</configuration>
</execution>
</executions>
</plugin>
要构建应用,可以执行以下命令:mvn clean install
。可以直接通过以下命令启动应用:mvn spring-boot:run
。如果将Maven项目导入Eclipse,可以作为Java应用运行或调试。也可以通过以下命令运行JAR文件:java -jar target/spring-boot-example-0.0.1-SNAPSHOT.jar
。
无论以何种方式启动应用,如果启动成功,都可以通过浏览器进行测试。