簡體   English   中英

如何將Grails戰爭部署到tomcat

[英]How to deploy a Grails war to tomcat

我要部署到Tomcat服務器8的WAR文件遇到問題。tomcat服務器安裝時帶有默認值(僅更改了用戶名和密碼)。 部署WAR文件時,我從Catalina.out日志中獲得以下輸出:

Configuring Spring Security Core ...
... finished configuring Spring Security Core

Configuring Spring Security REST ...
... finished configuring Spring Security REST

2015-04-06 13:37:37,345 [http-nio-8080-exec-2] ERROR context.GrailsContextLoaderListener  - Error initializing the application: Error creat$
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of$
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve refe$
    ... 5 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init meth$
    ... 5 more
Caused by: org.hibernate.MappingException: Missing type or column for column[descripciono_descripciones] on domain[Ejercicios] referencing[$
    ... 5 more
2015-04-06 13:37:37,348 [http-nio-8080-exec-2] ERROR context.GrailsContextLoaderListener  - Error initializing Grails: Error creating bean $
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of$
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve refe$
    ... 3 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init meth$
    ... 3 more
Caused by: org.hibernate.MappingException: Missing type or column for column[descripciono_descripciones] on domain[Ejercicios] referencing[$
    ... 3 more
2015-04-06 13:38:57,516 [http-nio-8080-exec-8] ERROR context.GrailsContextLoaderListener  - Error initializing Grails: Error creating bean $
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of$
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve refe$
    ... 3 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init meth$
    ... 3 more
Caused by: org.hibernate.MappingException: Missing type or column for column[descripciono_descripciones] on domain[Ejercicios] referencing[$
    ... 3 more
06-Apr-2015 13:38:57.517 SEVERE [http-nio-8080-exec-8] org.apache.catalina.core.StandardContext.startInternal Error listenerStart
06-Apr-2015 13:38:57.518 SEVERE [http-nio-8080-exec-8] org.apache.catalina.core.StandardContext.startInternal Context [/backend-gimnasio-0.$
06-Apr-2015 13:38:57.540 WARNING [http-nio-8080-exec-8] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web applic$
06-Apr-2015 13:38:57.540 WARNING [http-nio-8080-exec-8] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web app$
    java.lang.Object.wait(Native Method)
    java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
    java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
    com.mysql.jdbc.NonRegisteringDriver$1.run(NonRegisteringDriver.java:93)

我的猜測是MySQL連接存在問題,但我真的不知道應該在哪里指定連接字符串或類似的內容...數據庫是在服務器上創建的,Grails中的DataSource指向該位置數據庫。


編輯:

<?xml version="1.0" encoding="ISO-8859-1"?>
<webapps>
    <Context path="/backend-gimnasio" docBase="webapps/backend-gimnasio" debug="0" reloadable="true">
        <!-- Replace path and docBase and etc. with your applications settings.
             This file assumes that this file is named apps-myapp.xml and is
             located under Tomcats configuration directory. It is also assumed that
             the application which is going to use MyConnection JDBC connection is
             called myapp and is accessed as http://yourdomain.tld/myapp and is
             located under Tomcats webapps directory. Database name is assumed
             my_database. Replace these with your actual values. -->


        <!-- This is a sample XML config file for an Apache Tomcat 5.5  server to
             setup MySQL Connector/J 5.1 for JDBC connectivity. Information are
             derived from sources available in the Internet. -->


        <!-- Resource name and ResourceParams name, must be the same and
             The connection pool will be bound into JNDI with that name
             Eg: "java:/comp/env/jdbc/MyConnection". Replace MyConnection in both
             places with the name you want for the connection. -->
        <Resource name="jdbc/MyConnection" auth="Container" type="javax.sql.DataSource"/>
        <ResourceParams name="jdbc/MyConnection">


        <parameter>
                <name>factory</name>
                <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>


        <!-- Don't set this higher than max_connections on your MySQL server,
             usually this should be a 10 or a few 10's of connections, not
             hundreds or thousands -->
        <parameter>
                <name>maxActive</name>
                <value>10</value>
        </parameter>


        <!-- Just allow only as many idle connections as you require. Too much
             is bad. -->
        <parameter>
                <name>maxIdle</name>
                <value>5</value>
        </parameter>
      <!-- Don't use autoReconnect=true, it's going away eventually and it's a
             crutch for older connection pools that couldn't test connections.
             You need to decide whether your application is supposed to deal with
             SQLExceptions (hint, it should), and how much of a performance
             penalty you're willing to pay to ensure 'freshness' of the connection -->
        <parameter>
                <name>validationQuery</name>
                <value>SELECT 1</value>
        </parameter>


        <!-- The most conservative approach is to test connections before they're
             given to your application. For most applications this is okay, the
             query used above is very small and takes no real server resources to
             process, other than the time used to traverse the network. If you have
             a high-load application you'll need to rely on something else. -->
        <parameter>
                <name>testOnBorrow</name>
                <value>true</value>
        </parameter>
       <!-- Otherwise, or in addition to testOnBorrow, you can test while
             connections are sitting idle -->
        <parameter>
                <name>testWhileIdle</name>
                <value>true</value>
        </parameter>


        <!-- You have to set this value, otherwise even though you've asked
             connections to be tested while idle,the idle evicter thread
             will never run -->
        <parameter>
                <name>timeBetweenEvictionRunsMillis</name>
                <value>10000</value>
        </parameter>


        <!-- Don't set this too high. A few minutes or even fraction of a minute
             is sometimes okay here, it depends on your application and how much
             spikey load it will see -->
        <parameter>
                <name>minEvictableIdleTimeMillis</name>
                <value>60000</value>
        </parameter>
        <!-- Username and password used when connecting to MySQL. Replace myuser
             and mypassword with your username/password for the database user. -->
        <parameter>
                <name>"username"</name>
                <value>"password"</value>
        </parameter>
        <parameter>
                <name>"username"</name>
                <value>"password"</value>
        </parameter>


        <!-- Class name for the Connector/J driver -->
        <parameter>
                <name>driverClassName</name>
                <value>com.mysql.jdbc.Driver</value>
        </parameter>
        <!-- The JDBC connection url for connecting to MySQL, notice that if
             you want to pass any other MySQL-specific parameters you should
             pass them here in the URL, setting them using the parameter
             tags above will have no effect, you will also need to use &amp;
             to separate parameter values as the ampersand is a reserved
             character in XML. Replace my_database with your database name. -->
        <parameter>
                <name>url</name>
                <value>jdbc:mysql://localhost:3306/gimnasioBackend</value>
        </parameter>


        </ResourceParams>
        </Context>
</webapps>


我將上述配置添加到Tomcat,但仍然無法連接。 我開始對這個問題感到絕望。

從堆棧跟蹤中提取;

Missing type or column for column[descripciono_descripciones] on domain[Ejercicios]

如果列名與camelCase下划線格式的約定不匹配,則通常會從Hibernate獲取MappingException 如果是這種情況,則必須使用以下列在mappings部分中手動完成mappings column:

例如, airportCode column: 'AIRPORT_CD'

可以解決部署問題的修補程序(考慮到沒有其他障礙)。

經過一個星期的努力,我在一位同事和Tomcat文檔的幫助下找到了解決方案。
該配置是在context.xml文件中進行的,如下所示:

<Resource name="jdbc/turismoBackend" auth="Container" type="javax.sql.DataSource"
               maxTotal="100" maxIdle="30" maxWaitMillis="10000"
               username="youruser" password="yourpassword" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/yourdb"/>

值得注意的是,必須創建一個與root用戶不同的用戶,以便Tomcat可以使用所有特權和授予選項來訪問MySQL。 像這樣:

CREATE USER '[yourUsername]'@'localhost' IDENTIFIED BY '[yourPassword]';
GRANT ALL PRIVILEGES TO [yourUsername]@[yourServer] IDENTIFIED BY [yourPassword] WITH GRANT OPTION;

就是這樣! 一切正常運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM