使用 Spring 框架在 Openshift JSON 对象中返回的问题 [重复]
Posted
技术标签:
【中文标题】使用 Spring 框架在 Openshift JSON 对象中返回的问题 [重复]【英文标题】:Problems to return in Openshift JSON object with Spring framework [duplicate] 【发布时间】:2014-01-11 15:04:32 【问题描述】:我有一个带有 Tomcat 7 (JBoss EWS 2.0)、PostgreSQL 9.2 和 Spring 框架的 Java 应用程序。它包含一个 REST Web 服务,该服务从 android 客户端获取请求并返回 JSON 对象。
我已经通过ssh在Openshift的目录“~/app-root/runtime/repo/webapps/”中成功部署了预编译的java应用程序(ROOT.war),并在Openshift中创建了数据库。
我的应用程序在本地运行良好,但当我在 Openshift 中执行它时却不行:http://jbossews-roteiro.rhcloud.com/usuarios/1。日志中出现“无法获得 JDBC 连接:嵌套异常是 java.sql.Exception”类型的异常消息。
java.lang.Exception: Se ha producido un error al ejecutar el método UsuarioServiceImpl$verUsuario(1): Could not get JDBC Connection; nested exception is java.sql.SQLException: No suitable driver found for jdbc:postgresql://$OPENSHIFT_POSTGRESQL_DB_HOST:$OPENSHIFT_POSTGRESQL_DB_PORT/jbossews
at com.roteiro.services.usuario.UsuarioServiceImpl.verUsuario(UsuarioServiceImpl.java:115)
at com.roteiro.controller.RoteiroController.verUsuarioAction(RoteiroController.java:193)
at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
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:744)
我正在阅读一些相关的帖子,我认为问题出在 Spring 中包含的 PostgreSQL 配置或文件“~/app-root/repo/repo/.openshift/config/context.xml”中。我还检查了 PostgreSQL 连接器是否包含在库文件夹中。
ROOT.war的内容是:
/img/*
/META-INF/MANIFEST.MF
/WEB-INF/classes/*
/WEB-INF/lib/*
/WEB-INF/applicationContext.xml
/WEB-INF/applicationDataSource.xml
/WEB-INF/applicationEntityBean.xml
/WEB-INF/web.xml
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>jbossews</display-name>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
/WEB-INF/applicationContext.xml(春季):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="......................................................................">
<context:component-scan base-package="com.roteiro.controller" />
<mvc:annotation-driven />
<mvc:resources mapping="/img/**" location="/img/" />
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
<import resource="applicationDatasource.xml" />
<import resource="applicationEntityBean.xml" />
</beans>
/WEB-INF/applicationDatasource.xml(春天):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- development database -->
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://127.0.0.1:5432/jbossews" />
<property name="username" value="adminvhhvpiq" />
<property name="password" value="______________" />
</bean> -->
<!-- production database -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://$OPENSHIFT_POSTGRESQL_DB_HOST:$OPENSHIFT_POSTGRESQL_DB_PORT/$OPENSHIFT_APP_NAME" />
<property name="username" value="$OPENSHIFT_POSTGRESQL_DB_USERNAME" />
<property name="password" value="$OPENSHIFT_POSTGRESQL_DB_PASSWORD" />
</bean>
</beans>
context.xml:
<Resource name="jdbc/PostgreSQLDS"
url="jdbc:postgresql://$OPENSHIFT_POSTGRESQL_DB_HOST:$OPENSHIFT_POSTGRESQL_DB_PORT/$OPENSHIFT_APP_NAME"
driverClassName="org.postgresql.Driver"
username="$OPENSHIFT_POSTGRESQL_DB_USERNAME"
password="$OPENSHIFT_POSTGRESQL_DB_PASSWORD"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="5"
maxWait="10000"/>
【问题讨论】:
Dev & prod 中数据库的用户/密码是否相同? 是的。它是相同的用户和密码。 下一次,请发布您的堆栈跟踪,而不是其图片的链接。堆栈跟踪告诉您没有找到合适的驱动程序,这是一个常见错误。 【参考方案1】:我认为您正在尝试从属性文件或其他地方获取用户名/密码。您将username
设置为"$OPENSHIFT_POSTGRESQL_DB_USERNAME"
。从值中删除 "
或将用户名/密码直接放在这里。
【讨论】:
最后我解决了我编辑Spring配置文件/WEB-INF/applicationDatasource.xml的问题:ttp://www.springframework.org/dtd/spring-beans.dtd" rel="nofollow" target="_blank">springframework.org/dtd/spring-beans.dtd">以上是关于使用 Spring 框架在 Openshift JSON 对象中返回的问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 openshift 中使用 keycloak 和 spring 读取所有用户?
什么框架持久化,openshift + mongodb,jpa
当托管在 openshift 上时,WordPress(Redux 框架主题)中样式表和 Javascript 的路径无效