将我的Spring Boot应用程序部署到Google App Engine时,我在尝试访问Web应用程序时收到404错误。该应用程序在本地运行良好,但拒绝在应用程序引擎上运行。我使用命令mvn包appEngine:部署-Dapp.deploy.projectId=pollog
部署应用程序。
以下是部署应用程序后的日志:
2021-09-04 08:49:00 default[1] 2021-09-04 08:49:00.629 INFO 10 --- [ main] samuelb.capripol.CapripolApplication : Starting CapripolApplication v0.0.1-SNAPSHOT using Java 11.0.11 on localhost with PID 10 (/workspace/capripol-0.0.1-SNAPSHOT.jar started by www-data in /workspace)
2021-09-04 08:49:00 default[1] 2021-09-04 08:49:00.635 INFO 10 --- [ main] samuelb.capripol.CapripolApplication : The following profiles are active: mysql
2021-09-04 08:49:02 default[1] 2021-09-04 08:49:02.204 INFO 10 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-09-04 08:49:02 default[1] 2021-09-04 08:49:02.358 INFO 10 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 140 ms. Found 9 JPA repository interfaces.
2021-09-04 08:49:03 default[1] 2021-09-04 08:49:03.259 INFO 10 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-09-04 08:49:03 default[1] 2021-09-04 08:49:03.275 INFO 10 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-09-04 08:49:03 default[1] 2021-09-04 08:49:03.275 INFO 10 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.46]
2021-09-04 08:49:03 default[1] 2021-09-04 08:49:03.898 INFO 10 --- [ main] org.apache.jasper.servlet.TldScanner : 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.
2021-09-04 08:49:04 default[1] 2021-09-04 08:49:04.190 INFO 10 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-09-04 08:49:04 default[1] 2021-09-04 08:49:04.190 INFO 10 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3475 ms
2021-09-04 08:49:04 default[1] 2021-09-04 08:49:04.561 WARN 10 --- [ main] o.s.h.c.j.Jackson2ObjectMapperBuilder : For Jackson Kotlin classes support please add "com.fasterxml.jackson.module:jackson-module-kotlin" to the classpath
2021-09-04 08:49:04 default[1] 2021-09-04 08:49:04.663 INFO 10 --- [ main] o.s.c.g.a.s.GcpCloudSqlAutoConfiguration : Default MYSQL JdbcUrl provider. Connecting to jdbc:mysql://google/pollog?cloudSqlInstance=pollog:australia-southeast1:prod-instance&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false with driver com.mysql.jdbc.Driver
2021-09-04 08:49:04 default[1] 2021-09-04 08:49:04.677 WARN 10 --- [ main] o.s.c.g.a.s.GcpCloudSqlAutoConfiguration : spring.datasource.username is not specified. Setting default username.
2021-09-04 08:49:04 default[1] Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2021-09-04 08:49:04 default[1] 2021-09-04 08:49:04.877 INFO 10 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-09-04 08:49:04 default[1] 2021-09-04 08:49:04.995 INFO 10 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.31.Final
2021-09-04 08:49:05 default[1] 2021-09-04 08:49:05.246 INFO 10 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2021-09-04 08:49:05 default[1] 2021-09-04 08:49:05.426 INFO 10 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2021-09-04 08:49:05 default[1] 2021-09-04 08:49:05.432 WARN 10 --- [ main] com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
2021-09-04 08:49:05 default[1] 2021-09-04 08:49:05.576 INFO 10 --- [ main] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:05 default[1] 2021-09-04 08:49:05.576 INFO 10 --- [ main] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.660 INFO 10 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.716 INFO 10 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL57Dialect
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.762 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.763 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.791 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.791 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.812 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.812 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.840 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.840 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.859 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.859 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.882 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.882 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.908 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.909 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.925 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.926 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.943 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Connecting to Cloud SQL instance [pollog:australia-southeast1:prod-instance].
2021-09-04 08:49:06 default[1] 2021-09-04 08:49:06.944 INFO 10 --- [onnection adder] c.google.cloud.sql.mysql.SocketFactory : Using GAE Unix Sockets
2021-09-04 08:49:08 default[1] 2021-09-04 08:49:08.151 INFO 10 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2021-09-04 08:49:08 default[1] 2021-09-04 08:49:08.166 INFO 10 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2021-09-04 08:49:09 default[1] 2021-09-04 08:49:09.012 WARN 10 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2021-09-04 08:49:09 default[1] 2021-09-04 08:49:09.552 INFO 10 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure Ant [pattern='/css/**'] with []
2021-09-04 08:49:09 default[1] 2021-09-04 08:49:09.553 INFO 10 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure Ant [pattern='/js/**'] with []
2021-09-04 08:49:09 default[1] 2021-09-04 08:49:09.553 INFO 10 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure Ant [pattern='/images/**'] with []
2021-09-04 08:49:09 default[1] 2021-09-04 08:49:09.874 INFO 10 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4cb957b8, org.springframework.security.web.context.SecurityContextPersistenceFilter@45b32dfe, org.springframework.security.web.header.HeaderWriterFilter@56846330, org.springframework.web.filter.CorsFilter@3cdc7b09, org.springframework.security.web.authentication.logout.LogoutFilter@7bdf61ad, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@4a1a256d, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@22d9ca63, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@d611f1c, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7364eed1, org.springframework.security.web.session.SessionManagementFilter@6cfbbff7, org.springframework.security.web.access.ExceptionTranslationFilter@750a04ec, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@39dec536]
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.173 INFO 10 --- [ main] o.s.c.g.core.DefaultCredentialsProvider : Default credentials provider for Google Compute Engine.
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.173 INFO 10 --- [ main] o.s.c.g.core.DefaultCredentialsProvider : Scopes in use by default credentials: [https://www.googleapis.com/auth/pubsub, https://www.googleapis.com/auth/sqlservice.admin, https://www.googleapis.com/auth/devstorage.read_only, https://www.googleapis.com/auth/devstorage.read_write, https://www.googleapis.com/auth/trace.append, https://www.googleapis.com/auth/cloud-platform]
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.186 INFO 10 --- [ main] o.s.c.g.a.c.GcpContextAutoConfiguration : The default project ID is pollog
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.372 INFO 10 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.383 INFO 10 --- [ main] samuelb.capripol.CapripolApplication : Started CapripolApplication in 10.788 seconds (JVM running for 12.207)
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.384 INFO 10 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state LivenessState changed to CORRECT
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.387 INFO 10 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state ReadinessState changed to ACCEPTING_TRAFFIC
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.448 INFO 10 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.448 INFO 10 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-09-04 08:49:10 default[1] 2021-09-04 08:49:10.450 INFO 10 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms
2021-09-04 08:49:10 default[1] "GET /login HTTP/1.1" 404
2021-09-04 08:49:10 default[1] "GET /favicon.ico HTTP/1.1" 302
2021-09-04 08:49:10 default[1] "GET /login HTTP/1.1" 404
2021-09-04 08:52:32 default[1] 2021-09-04 08:52:32.255 INFO 10 --- [extShutdownHook] o.s.b.a.ApplicationAvailabilityBean : Application availability state ReadinessState changed from ACCEPTING_TRAFFIC to REFUSING_TRAFFIC
2021-09-04 08:52:35 default[1] {"severity": "WARNING", "message": "App is listening on port 8080. We recommend your app listen on the port defined by the PORT environment variable to take advantage of an NGINX layer on port 8080."}\n
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>samuelB</groupId>
<artifactId>capripol</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Capripol</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>1.0.0.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</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-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.5</version>
</dependency>
</dependencies>
<repositories>
<!-- Use Spring Milestone Repository -->
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.1.0</version>
<configuration>
<version>1</version>
<projectId>GCLOUD_CONFIG</projectId>
</configuration>
</plugin>
</plugins>
</build>
</project>
应用程序.属性:
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.datasource.initialization-mode=always
spring.profiles.active=mysql
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
application-mysql.properties:
database=mysql
# Delete the rest of the original content of the file and replace with the following:
spring.cloud.gcp.sql.database-name=pollog
spring.cloud.gcp.sql.instance-connection-name=pollog:australia-southeast1:prod-instance
spring.datasource.password = password123
# Initialize the database since the newly created Cloud SQL database has no tables. The following flag is for Spring Boot 2.
spring.datasource.initialization-mode=always
主要:
@SpringBootApplication
public class CapripolApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(CapripolApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(CapripolApplication.class);
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/", "classpath:/images/") //tells Spring the location of resources
.setCachePeriod(0);
}
}
WebSecurityConfig:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
@Autowired
DataSource dataSource;
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Autowired
BCryptPasswordEncoder bCryptPasswordEncoder;
//configuring datasource
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource);
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public AuthenticationManager customAuthenticationManager() throws Exception {
return authenticationManager();
}
//Tells Spring to 'ignore' or 'not navigate' these when trying to access files under their paths
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/css/**", "/js/**", "/images/**");
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors().and().csrf().disable()
.authorizeRequests()
.antMatchers("/login").permitAll() //these permit which roles can access whaich pages, i.e. any can login
.antMatchers("/Admin").hasAnyAuthority("Admin", "Super Admin")//only admins/ superadmins can access admin page
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")//defines page used for logging in
.failureUrl("/login?error")//page for failed login
.defaultSuccessUrl("/")//page after successful login
.permitAll()
.and()
.logout()
.permitAll()
.and()
.sessionManagement()
.invalidSessionUrl("/login");
}
}
app.yaml:
runtime: java11
# entrypoint: java -Xmx64m -jar capripol-0.0.1-SNAPSHOT.jar
instance_class: F2
handlers:
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto
- url: /login
secure: always
redirect_http_response_code: 301
script: auto
编辑:我尝试使用更大的instace类型F4,F4_1G但这没有任何区别。我还添加了以下内容来抑制有关端口的警告,但这没有任何区别:
public static void main(String[] args) throws IOException {
SpringApplication.run(CapripolApplication.class, args);
int port = Integer.parseInt(System.getenv().getOrDefault("PORT", "8080"));
HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
// Set root URI path.
server.createContext("/", (t) -> {
byte[] response = "Hello World!".getBytes();
t.sendResponseHeaders(200, response.length);
try (OutputStream os = t.getResponseBody()) {
os.write(response);
}
});
// Create a second URI path.
server.createContext("/foo", (t) -> {
byte[] response = "Foo!".getBytes();
t.sendResponseHeaders(200, response.length);
try (OutputStream os = t.getResponseBody()) {
os.write(response);
}
});
server.start();
}
我也一直在尝试解决它,发现路径或路线是错误的。尝试查看邮递员,看看它是否有效。pd:我发现我的参数也是错误的。数据源用户名应该是在谷歌云上注册时创建的用户名
我正在app engine上构建一个web应用程序。在我的例子中,这是建立在django Nonl的基础上的,但关键是它使用的是谷歌的数据存储。 我喜欢这样一个事实,即我不需要处理复制、分片、备份等,但有一件事总是妨碍我,那就是最终的一致性,这似乎妨碍了实现一个通用的Web应用程序模式,我称之为“添加 假设我有一个项目管理应用程序。项目是它的中心模型。现在有一个网页页面,我可以在其中看到所有项目的
是否有人有链接或可以提供Java谷歌应用程序引擎项目的代码,该项目只是与谷歌日历交互。假设从日历中获取活动。 Google Sample calendar-app engine-Sample在从HG检出后无法编译,我曾尝试搜索教程并创建自己的教程,只是运气好而已。 我已经设置了一个 API 访问项目来获取客户端机密.json。
我想知道我是否需要Google java客户端库才能从GAE访问我的Google日历。默认情况下,它们是Google App Engine SDK的一部分吗? 此外,我找不到一个很好的示例或教程来展示如何从Google Cloud Platform应用程序创建、读取、更新和删除Google日历事件。 非常感谢,如果您可以提供相同的代码示例或链接到适当的工作教程。
我是谷歌应用引擎服务的新手。我有一个JavaMaven项目,其中一个模块运行在应用引擎flex上,另一个模块运行在应用引擎标准上。我正在为应用引擎Flex API使用JWT身份验证。我想从应用引擎标准向应用引擎Flex发出发布请求。验证服务的最佳方式应该是什么? 此外,我还有一个cron服务,它可以访问我用于某些后端内容的特定URL。如何验证请求是否仅来自Cron服务?
我有一个简单的无服务器下JS应用运行在谷歌云应用引擎。我已经配置了SSL证书,我可以通过访问我的URL看到它的工作原理。即。https://example.com/但是如果我去http://example.com/它不会自动重定向到启用HTTPS的网站版本。 应用程序。亚马尔-
具体到基于Docker的部署,这两者之间有什么区别?由于Google App Engine Flexible现在也支持基于Dockerfile的部署,而且它也是完全管理的服务,所以它似乎比在Container Engine上配置Kubernetes部署更可取,不是吗? 有哪些用例更倾向于使用Google容器引擎而不是灵活的应用引擎?