gpt4 book ai didi

java - 如何使用 heroku 的 webapp-runner.jar 运行 cbioportal tomcat war

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:35 24 4
gpt4 key购买 nike

我一直在按照 Heroku ( https://devcenter.heroku.com/articles/java-webapp-runner ) 的教程学习如何使用 webapp-runner.jar 运行 war 文件。现在我想在 heroku 上运行 cbioportal ( https://github.com/cbioportal/cbioportal )。我已经设法将 webapp-runner.jar 添加为依赖项,请参阅:https://github.com/inodb/cbioportal/tree/heroku .

当我从 repo 目录运行以下命令时:

java -Djava.naming.factory.initial=org.apache.naming.java.javaURLContextFactory \
-jar portal/target/dependency/webapp-runner.jar --port 9099 portal/target/portal

我收到这样的错误:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityMapper' defined in class path resource [applicationContext-business.xml]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext-business.xml]: Cannot resolve reference to bean 'businessDataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'businessDataSource' defined in class path resource [applicationContext-business.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name [java:comp/env/jdbc/mydb] is not bound in this Context. Unable to find [java:comp].

我试过传递本地 Tomcat 安装的 context.xml 并直接在文件中设置 mysql 连接字符串,但无济于事。

最佳答案

我认为您需要将数据库 URL 注册为 context.xml 文件中的 JNDI 资源,可能像这样:

<Context>
<Resource name="jdbc/cbioportal" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="user" password="pass" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbname"/>
</Context>

然后您需要将该上下文 XML 作为选项添加到 java 命令,如下所示:

$ java ... \
-jar portal/target/dependency/webapp-runner.jar \
--context-xml context.xml --port 9099 \
portal/target/portal

对于 context.xml 中的 url,您必须从 $ heroku config 中获取它并将其转换为jdbc 网址。它在运行时作为 $JDBC_DATABASE_URL 可用。 ,但我不确定如何将它动态地放入 context.xml 中。

出于这个原因,我认为如果可能的话最好不要使用 JNDI。你能直接在你的应用程序中配置数据库参数吗?

我从 this line in your config 得到了 JNDI 名称

有关 JNDI 与 Tomcat 的更多信息,请参阅 the Tomcat docs .

有关 webapp-runner 选项的更多信息,请参阅 project readme .

关于java - 如何使用 heroku 的 webapp-runner.jar 运行 cbioportal tomcat war,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34214673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com