A dead tree towers over the jungle canopy in the rain forest of the Mosquito Coast, Honduras.
下載本篇完整代碼 Github
Setup
要创建 Spring Boot Application 项目结构,可以使用 Spring CLI 进行自动化创建,或者手工编写 Maven 配置 pom.xml 来创建。
Install Spring CLI
依照文檔 Installing the Spring Boot CLI 步驟安裝Sprring CLI 工具:
- 下載解壓 spring-boot-cli-1.5.4.RELEASE-bin.zip
- 創建環境變量 SPRING_HOME
- 添加 SPRING_HOME/bin 到 path 環境變量中
執行命令 spring version
查看是否成功安裝。
Building Project
我們這裡不是用 Spring CLI 生成項目代碼,而是一步步手動添加各個組件,以期讀者對項目結構有深入理解。首先创建项目文件夹
mkdir try-cf-spring-boot
cd try-cf-spring-boot
Build System
創建 Maven 主配置文件 pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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>wang.tiven</groupId>
<artifactId>try-cf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- to jar when packaging-->
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
这是通过继承 spring-boot-starter-parent
来获得默认的配置, 包括 common dependencies, plugins, resource filtering 等。你也可以不继承它而自己配置这些设置, 比如添加 spring-boot-dependencies
来引入默认的packages 如下
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
使用 mvn dependency:tree
查看項目依賴結構(这会先下載依賴包),目前只有一個 wang.tiven:try-cf:jar:0.0.1-SNAPSHOT
。
我們要開發 web application 所以添加 spring-boot-starter-web
module
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
重新運行 mvn dependency:tree
下載相關依賴。
更多内容请参考 Build systems on Spring Boot Reference Guide.
Structuring Code
創建代碼(根据你的项目目录)在文件夹 src/main/java/wang/tiven/trycf/web 首先创建一个简单的 Restful Controller 返回一个 “Hello World!” 字符串
package wang.tiven.trycf.web;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class HomeController {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(HomeController.class, args);
}
}
運行命令 mvn spring-boot:run
成功啟動 Tomcat 後查看 url http://localhost:8080/ 便可得到 Hello World!
Deploy to Cloud Foundry
Package
想要打包成可執行的 jar
或 war
文件需要添加插件 spring-boot-maven-plugin
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然後執行 mvn clean package
可以得到可執行的 jar, 可以測試 jar 可執行性 java -jar target/try-cf-spring-boot-0.0.1-SNAPSHOT.jar
Push to Pivotal Web Services
創建 Cloud Foundry 配置文件 manifest.yml
---
applications:
- name: try-cf-spring-boot
buildpack: java_buildpack
instances: 1
memory: 200M
host: try-cf-spring-boot
path: target/try-cf-spring-boot-0.0.1-SNAPSHOT.jar
path 變量指定 artifact 的位置
添加配置,指定 Tomcat 由服务器提供
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
部署应用
cf api https://api.run.pivotal.io
cf login
cf push
成功後可以得到可訪問鏈接 http://try-cf-spring-boot.cfapps.io
最新更新,200M 内存已经不够了,会报以下错误,看来要 600M 才够运行起来
2019-05-29T14:17:16.263+08:00 [APP/PROC/WEB/0] [ERR] Cannot calculate JVM memory configuration: There is insufficient memory remaining for heap. Memory available for allocation 200M is less than allocated memory 596489K (-XX:ReservedCodeCacheSize=240M, -XX:MaxDirectMemorySize=10M, -XX:MaxMetaspaceSize=84489K, -Xss1M * 250 threads)
More
更改 Spring Boot 的啟動入口, 其中 @SpringBootApplication
為一方便性的註解,它包含了
@Configuration
標註此class在應用上下文 application context 中為一定義bean的class。@EnableAutoConfiguration
tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings.- 如果 Spring Boot 發現 spring-webmvc on the classpath, 則自動添加
@EnableWebMvc
, 你也可以手動添加@EnableWebMvc
@ComponentScan
則說明自動查找其他components, configurations, and services
@SpringBootApplication
public class HeroApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(HeroApplication.class, args);
}
}
Comments