Java 在Elastic Beanstalk上将Grails 3应用程序部署到Tomcat 8

Java 在Elastic Beanstalk上将Grails 3应用程序部署到Tomcat 8,java,tomcat,grails,Java,Tomcat,Grails,我正在尝试将Grails 3应用程序部署到Elastic Beanstalk上的Tomcat 8实例上,并且我尝试了在Google和Stack Exchange上发现的一些事情,包括将“org.springframework.boot:spring boot starter Tomcat”依赖项从“compile”改为“provided”,但没有成功。Elastic Beanstalk将接受war文件,但随后只显示一个空白页面 我打开了Grails生成的war文件,发现基本目录中没有index.

我正在尝试将Grails 3应用程序部署到Elastic Beanstalk上的Tomcat 8实例上,并且我尝试了在Google和Stack Exchange上发现的一些事情,包括将“org.springframework.boot:spring boot starter Tomcat”依赖项从“compile”改为“provided”,但没有成功。Elastic Beanstalk将接受war文件,但随后只显示一个空白页面

我打开了Grails生成的war文件,发现基本目录中没有index.jsp文件,web-INF下也没有web.xml文件。这两个文件都存在于我使用Maven web app原型制作的简单war文件中,可以正常工作,因此我有两个问题:

1) 有没有其他人部署过从最新版本的Grails到Tomcat8的应用程序?尤其是弹性豆茎,尤其是最近?我在谷歌上找到的大多数答案都是旧的,所以我在想,也许新版本改变了一些东西


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

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

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

log/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,它就可以工作了

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

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

log/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,它就可以工作了

我们在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–我们经常将grails 3部署到EB,但我们只使用独立的jar和java EB配置文件。我发现同样的问题,我不知道如何使它工作,我最终只是恢复到grails 2.3.7,这似乎很好。@JohnStanford,grails v2非常旧,我们应该转到grails 3。0@JonhStanford ,我已成功部署到AWS tomcat 8.0、grails 3.2.3–AWS beanstalk上的tomcat8可能不完全支持H2数据库,因此部署过程中断,结果返回为空白页。AWS beanstalk上的tomcat8可能不完全支持H2数据库,因此部署过程中断,结果返回为空白页