如何将 Spring Boot 部署到 Cloud Foundry?
How to deploy Spring Boot to Cloud Foundry?
我尝试使用以下 pom.xml
将我的 spring 启动应用程序部署到 CF
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cloud-connectors</artifactId>
</dependency>
</dependencies>
已更新
我的申请
@SpringBootApplication
public class EdollarApplication {
@Autowired
private DataSource dataSource;
public static void main(String[] args) {
SpringApplication.run(EdollarApplication.class, args);
}
}
DataSourceConfiguration.java
@Configuration
@Profile("cloud")
public class DataSourceConfiguration {
@Bean
public Cloud cloud() {
return new CloudFactory().getCloud();
}
@Bean
@ConfigurationProperties(DataSourceProperties.PREFIX)
public DataSource dataSource() {
return cloud().getSingletonServiceConnector(DataSource.class, null);
}
}
日志中没有错误,但是我无法访问我在应用程序中定义的 URL。示例日志如下所示
Updated app with guid 8b167ac9-11bb-483e-be0a-3dd8c8991a84 ({"state"=>"STARTED"})
-----> Downloaded app package (20K)
-----> Downloading Open Jdk JRE 1.8.0_45 from https://download.run.pivotal.io/openjdk/trusty/x86_64/openjdk-1.8.0_45.tar.gz (2.5s)
Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.3s)
-----> Downloading Tomcat Instance 8.0.21 from https://download.run.pivotal.io/tomcat/tomcat-8.0.21.tar.gz (0.5s)
Expanding Tomcat to .java-buildpack/tomcat (0.1s)
-----> Downloading Tomcat Lifecycle Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-lifecycle-support/tomcat-lifecycle-support-2.4.0_RELEASE.jar (0.0s)
-----> Downloading Tomcat Logging Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-logging-support/tomcat-logging-support-2.4.0_RELEASE.jar (0.0s)
-----> Downloading Tomcat Access Logging Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-access-logging-support/tomcat-access-logging-support-2.4.0_RELEASE.jar (0.0s)
-----> Uploading droplet (51M)
[CONTAINER] org.apache.catalina.core.StandardService INFO Starting service Catalina
[CONTAINER] org.apache.catalina.startup.Catalina INFO Initialization processed in 514 ms
[CONTAINER] org.apache.coyote.http11.Http11NioProtocol INFO Initializing ProtocolHandler ["http-nio-61187"]
[CONTAINER] org.apache.catalina.core.StandardEngine INFO Starting Servlet Engine: Apache Tomcat/8.0.21
[CONTAINER] org.apache.catalina.startup.HostConfig INFO Deploying web application directory /home/vcap/app/.java-buildpack/tomcat/webapps/ROOT
[CONTAINER] org.apache.jasper.servlet.TldScanner INFO At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[CONTAINER] org.apache.coyote.http11.Http11NioProtocol INFO Starting ProtocolHandler ["http-nio-61187"]
[CONTAINER] org.apache.tomcat.util.net.NioSelectorPool INFO Using a shared selector for servlet write/read
[CONTAINER] org.apache.catalina.startup.Catalina INFO Server startup in 507 ms
我在这里错过了什么?
这是一个在 Cloud Foundry 中配置为 运行 的最小 Spring 引导项目示例:https://github.com/gratiartis/super-mini
我通过将以下 manifest.yml
放入项目的根目录,在 Cloud Foundry 中 运行 获得了它。
---
applications:
- name: super-mini
# Fork of https://github.com/cloudfoundry/java-buildpack
# For stability, keep your own fork.
buildpack: https://github.com/gratiartis/java-buildpack
memory: 512M
instances: 1
# Because the URL will be http://super-mini.cfapps.io/
host: super-mini
domain: cfapps.io
path: target/super-mini-1.0.0-SNAPSHOT.jar
请注意,可以添加以下内容来激活配置文件(即 "cloud"):
env:
SPRING_PROFILES_ACTIVE: cloud
path
是基于我 运行ning 从我的项目的根目录部署。我相信您会猜到,这是一个 Maven 构建,因此在 target
目录中创建了一个 .jar。
要部署,cd
到项目的根目录和运行:
cf push
以上将在 http://super-mini.cfapps.io/hello
创建一个应用程序 运行ning
看看 - 运行现在是晚上。当然,我现在已经创建了那个应用程序名称,所以你不能使用它!
我尝试使用以下 pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cloud-connectors</artifactId>
</dependency>
</dependencies>
已更新
我的申请
@SpringBootApplication
public class EdollarApplication {
@Autowired
private DataSource dataSource;
public static void main(String[] args) {
SpringApplication.run(EdollarApplication.class, args);
}
}
DataSourceConfiguration.java
@Configuration
@Profile("cloud")
public class DataSourceConfiguration {
@Bean
public Cloud cloud() {
return new CloudFactory().getCloud();
}
@Bean
@ConfigurationProperties(DataSourceProperties.PREFIX)
public DataSource dataSource() {
return cloud().getSingletonServiceConnector(DataSource.class, null);
}
}
日志中没有错误,但是我无法访问我在应用程序中定义的 URL。示例日志如下所示
Updated app with guid 8b167ac9-11bb-483e-be0a-3dd8c8991a84 ({"state"=>"STARTED"})
-----> Downloaded app package (20K)
-----> Downloading Open Jdk JRE 1.8.0_45 from https://download.run.pivotal.io/openjdk/trusty/x86_64/openjdk-1.8.0_45.tar.gz (2.5s)
Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.3s)
-----> Downloading Tomcat Instance 8.0.21 from https://download.run.pivotal.io/tomcat/tomcat-8.0.21.tar.gz (0.5s)
Expanding Tomcat to .java-buildpack/tomcat (0.1s)
-----> Downloading Tomcat Lifecycle Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-lifecycle-support/tomcat-lifecycle-support-2.4.0_RELEASE.jar (0.0s)
-----> Downloading Tomcat Logging Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-logging-support/tomcat-logging-support-2.4.0_RELEASE.jar (0.0s)
-----> Downloading Tomcat Access Logging Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-access-logging-support/tomcat-access-logging-support-2.4.0_RELEASE.jar (0.0s)
-----> Uploading droplet (51M)
[CONTAINER] org.apache.catalina.core.StandardService INFO Starting service Catalina
[CONTAINER] org.apache.catalina.startup.Catalina INFO Initialization processed in 514 ms
[CONTAINER] org.apache.coyote.http11.Http11NioProtocol INFO Initializing ProtocolHandler ["http-nio-61187"]
[CONTAINER] org.apache.catalina.core.StandardEngine INFO Starting Servlet Engine: Apache Tomcat/8.0.21
[CONTAINER] org.apache.catalina.startup.HostConfig INFO Deploying web application directory /home/vcap/app/.java-buildpack/tomcat/webapps/ROOT
[CONTAINER] org.apache.jasper.servlet.TldScanner INFO At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[CONTAINER] org.apache.coyote.http11.Http11NioProtocol INFO Starting ProtocolHandler ["http-nio-61187"]
[CONTAINER] org.apache.tomcat.util.net.NioSelectorPool INFO Using a shared selector for servlet write/read
[CONTAINER] org.apache.catalina.startup.Catalina INFO Server startup in 507 ms
我在这里错过了什么?
这是一个在 Cloud Foundry 中配置为 运行 的最小 Spring 引导项目示例:https://github.com/gratiartis/super-mini
我通过将以下 manifest.yml
放入项目的根目录,在 Cloud Foundry 中 运行 获得了它。
---
applications:
- name: super-mini
# Fork of https://github.com/cloudfoundry/java-buildpack
# For stability, keep your own fork.
buildpack: https://github.com/gratiartis/java-buildpack
memory: 512M
instances: 1
# Because the URL will be http://super-mini.cfapps.io/
host: super-mini
domain: cfapps.io
path: target/super-mini-1.0.0-SNAPSHOT.jar
请注意,可以添加以下内容来激活配置文件(即 "cloud"):
env:
SPRING_PROFILES_ACTIVE: cloud
path
是基于我 运行ning 从我的项目的根目录部署。我相信您会猜到,这是一个 Maven 构建,因此在 target
目录中创建了一个 .jar。
要部署,cd
到项目的根目录和运行:
cf push
以上将在 http://super-mini.cfapps.io/hello
创建一个应用程序 运行ning看看 - 运行现在是晚上。当然,我现在已经创建了那个应用程序名称,所以你不能使用它!