当前位置: 首页 > 知识库问答 >
问题:

谷歌应用引擎Spring Boot给出一个404错误

蒋文光
2023-03-14

将我的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();
    }

共有1个答案

索和璧
2023-03-14

我也一直在尝试解决它,发现路径或路线是错误的。尝试查看邮递员,看看它是否有效。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容器引擎而不是灵活的应用引擎?