Amazon Web Services - развертывание Spring Boot Application - PullRequest
0 голосов
/ 19 мая 2018

У меня есть приложение с весенней загрузкой, которое я развертываю на AW (Elastic Beanstalk) AWS.Приложение отлично работает локально, однако, я получаю 404 на всех страницах, к которым я пытаюсь получить доступ в развернутой версии.Кроме того, я также не могу получить доступ к статическому содержимому в статической папке.Все конечные точки REST работают нормально.

Моя структура проекта выглядит следующим образом

-- src
  -- main
     -- kotlin
     -- resources
        -- static
           -- css
           -- fonts
           -- images
           -- js
        -- templates (contains html files)

Я пытался определить option_settings в файле .config в папке .ebextensions

option_settings
  aws:elasticbeanstalk:container:java:staticfiles: 
    /public/: WEB-INF/classes/static
    /static/: WEB-INF/classes/staticenter code here

Я также попытался добавить следующее в мой весенний класс конфигурации

@Configuration open class MvcConfig : WebMvcConfigurerAdapter() {

override fun addViewControllers(registry: ViewControllerRegistry) {
    registry.addViewController("/").setViewName("homepage")
    registry.addViewController("/index").setViewName("homepage")
    registry.addViewController("/home").setViewName("homepage")
    registry.addViewController("/homepage").setViewName("homepage")
    registry.addViewController("/login").setViewName("login")
    registry.addViewController("/products").setViewName("productsList")
    registry.addViewController("/productdetail").setViewName("productDetail")
}

@Bean
open fun viewResolver(): ViewResolver {
    val bean = InternalResourceViewResolver()

    bean.setPrefix("/templates/")
    bean.setSuffix(".html")

    return bean
}

override fun addResourceHandlers(registry: ResourceHandlerRegistry?) {
    // Register resource handler for all static folders
    registry!!.addResourceHandler("/resources/**").addResourceLocations("classpath:/statics/")
            .setCacheControl(CacheControl.maxAge(2, TimeUnit.HOURS).cachePublic())
}

@Bean
open fun errorPageFilter(): ErrorPageFilter {
    return ErrorPageFilter()
}

@Bean
open fun disableSpringBootErrorFilter(filter: ErrorPageFilter): FilterRegistrationBean {
    val filterRegistrationBean = FilterRegistrationBean()
    filterRegistrationBean.filter = filter
    filterRegistrationBean.isEnabled = false
    return filterRegistrationBean
}

Я развертываюсь на tomcat8, который находится за прокси-сервером Apache.

Мои настройки EB верны, так как япопытался развернуть более простое приложение на экземпляре, который работал нормально.

Пожалуйста, дайте мне знать, если есть какие-либо дополнительные сведения, которые я должен предоставить

1 Ответ

0 голосов
/ 20 мая 2018

Проблема была связана с resourceHandler, его собственный путь к классу никогда не добавлялся в обработчик ресурсов, даже если в журнале сервлета указывалось, что это так.

Spring по умолчанию отображает следующие пути

classpath:META-INF/resources/
classpath:resources/
classpath:static/
classpath:public/

, необходимые для добавления / ** к отображению.Решение состояло в том, чтобы изменить код к следующему

override fun addResourceHandlers(registry: ResourceHandlerRegistry?) {
    registry!!.addResourceHandler("/**", "/static/**")
              .addResourceLocations("classpath:/templates/", "classpath:/static/").setCacheControl(CacheControl.maxAge(2,TimeUnit.HOURS).cachePublic())
}

@Bean
open fun viewResolver(): ViewResolver {
    val bean = InternalResourceViewResolver()
    bean.setSuffix(".html")
    return bean
}
...