【问题标题】:Deploying Grails 3 App to Tomcat 8 on Elastic Beanstalk在 Elastic Beanstalk 上将 Grails 3 应用程序部署到 Tomcat 8
【发布时间】:2017-09-04 03:12:19
【问题描述】:

我正在尝试将 Grails 3 应用程序部署到 Elastic Beanstalk 上的 Tomcat 8 实例,并且我尝试了一些我在 Google 和 Stack Exchange 上找到的东西,包括更改“org.springframework.boot:spring -boot-starter-tomcat”从“编译”到“提供”的依赖关系不起作用。 Elastic Beanstalk 将接受 war 文件,但随后只显示一个空白页面。

我打开Grails生成的war文件,发现基础目录中没有index.jsp文件,WEB-INF下没有web.xml文件。这两个都存在于我使用 Maven 网络应用原型制作的简单战争文件中,该文件有效,所以我有两个问题:

1) 有其他人将应用程序从最新版本的 Grails 部署到 Tomcat 8 吗?尤其是在 Elastic Beanstalk 上,尤其是最近?我从谷歌搜索中找到的大多数答案都是旧的,所以我想可能是新版本发生了一些变化。

2) 查看 Tomcat 8 在打开 WAR 文件并加载它时所经历的过程的最佳参考是什么?我想如果我能深入挖掘这个过程,我就能找出缺失的部分在哪里。

【问题讨论】:

  • 我们在 EB 上部署了很多 grails 3,但我们只使用独立的 jar 和 java EB 配置文件。
  • 我发现同样的问题不知道如何解决
  • 我最终只是恢复到 Grails 2.3.7,这似乎工作正常。
  • @JohnStanford,grails v2 已经很老了,我们应该迁移到 grails 3.0
  • @JonhStanford,我成功部署到AWS tomcat 8.0,grails 3.2.3——

标签: java tomcat grails


【解决方案1】:

@John Stanford,我发现同样的问题我的 grails 版本是 3.2.3

我在本地测试了部署到我的tomcat8,发现我的数据源配置导致了这个问题,我的grails应用程序只是虚拟应用程序,不需要数据库连接,

日志/var/lib/tomcat8/logs/catalina.2017-xx-xx.log如下所示

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsCacheFilter': Cannot create inner bean '(inner bean)#7cbf54fc' of type [grails.plugin.cache.web.filter.simple.MemoryPageFragmentCachingFilter] while setting bean property 'filter'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name '(inner bean)#7cbf54fc': Unsatisfied dependency expressed through method 'setUrlMappingsHandlerMapping' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'urlMappingsHandlerMapping': Unsatisfied dependency expressed through method 'setWebRequestInterceptors' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'openSessionInViewInterceptor': Cannot resolve reference to bean 'hibernateDatastore' while setting bean property 'hibernateDatastore'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateDatastore': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1486)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1231)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)

所以我注释掉application.yml的production.dataSource.url

environments:
    development:
        dataSource:
            dbCreate: create-drop
            url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
    test:
        dataSource:
            dbCreate: update
            url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
    production:
        grails:
            serverURL: http://xxx-evn-yyy-zzzz-aws-zone-2.elasticbeanstalk.com
        dataSource:
            dbCreate: none
            #url: jdbc:h2:./prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
            properties:
                jmxEnabled: true
                initialSize: 5
                maxActive: 50
                minIdle: 5
                maxIdle: 25
                maxWait: 10000

最后部署到 AWS Beanstalk 就可以了!

【讨论】:

  • 看来AWS beanstalk上的tomcat8可能不完全支持H2数据库,所以部署过程中断,结果返回空白页
猜你喜欢
  • 2015-09-21
  • 2020-09-02
  • 2021-04-28
  • 2016-11-20
  • 2013-12-15
  • 2021-02-11
  • 2018-12-07
  • 2022-06-11
  • 2018-09-13
相关资源
最近更新 更多