- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚将在本地主机上运行良好的 Spring 应用程序 移动到 mochahost 上的共享网络托管服务器,我看到以下异常(截断)根本原因:
root cause
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adDaoImpl': Injection of autowired dependencies failed; nested exception is java.lang.NullPointerException
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
(truncated)
及以下:
root cause
java.lang.NullPointerException
com.adsense.connection.MySqlDBPooling.getConnection(MySqlDBPooling.java:28)
com.adsense.dao.impl.AdDaoImpl.setDataSource(AdDaoImpl.java:21)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
(truncated)
AdDaoImpl.java
@Repository
public class AdDaoImpl implements AdDao{
Connection conn;
@Autowired
public void setDataSource(){
try{
conn = (new MySqlDBPooling()).getConnection();
}catch(SQLException e){
e.printStackTrace();
}
}
...
...
}
MySqlDBPooling.java
package com.adsense.connection;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.*;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.sql.DataSource;
public class MySqlDBPooling implements ServletContextListener{
private static DataSource ds;
public MySqlDBPooling(){
}
public void contextInitialized(ServletContextEvent sce){
try{
Context envCtx = (Context)(new InitialContext()).lookup("java:comp/env");
ds = (DataSource)envCtx.lookup("jdbc/AdSenseDB");
System.out.println((new StringBuilder("MySqlDBPooling is set to ")).append(ds.toString()).toString());
}catch(NamingException e){
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException{
return ds.getConnection(); // getting NullPointerException here
}
public void contextDestroyed(ServletContextEvent servletcontextevent){
}
}
上下文.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" version="5.0">
<Resource
name="jdbc/AdSenseDB"
auth="Container"
type="javax.sql.DataSource"
removeAbandoned="true"
removeAbandonedTimeout="30"
maxActive="300"
maxIdle="300"
maxWait="1000"
username="<username here>"
password="<password here>"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/adsense_adsense"/>
</Context>
网络.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>Adsense</display-name>
<listener>
<listener-class>com.adsense.connection.MySqlDBPooling</listener-class>
</listener>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.jpeg</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.ico</url-pattern>
</servlet-mapping>
</web-app>
几点:
我已将我的 jar(包括 mysql-connector-java-5.1.10.jar)放在/WEB-INF/lib 中。在本地主机上,mysqlconnector 位于 tomcat 库中。但由于这是一个共享服务器,我无法访问 tomcat 库。 WEB-INF/lib 可能是 mysql 连接器的错误位置。
WEB-INF/lib 可能是放置库的错误位置。在我在 Amazon Web 服务器上运行的其他应用程序(与此无关)中,我已将所有库放在 tomcat libs 文件夹中。
在 context.xml 中,我什至将 url 更改为 jdbc:mysql://domain.com:3306/adsense_adsense,即将 localhost 替换为实际域,但这没有帮助。
在 MySqlDBPooling.java 中,如果 ds 为 null,为什么它不早点抛出 NullPointerException
System.out.println((new StringBuilder("MySqlDBPooling is set to ")).append(ds.toString()).toString());
在服务器启动期间执行(MySqlDBPooling 类作为监听器添加到 web.xml 中)
感谢您的关注。
詹姆斯
编辑:
在我按照@JB Nizet 的建议(使用 Spring 获取数据源)将 MySqlDBPooling.java 更新为:
package com.adsense.connection;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class MySqlDBPooling implements ServletContextListener{
private static DriverManagerDataSource ds;
public MySqlDBPooling(){
}
public void contextInitialized(ServletContextEvent sce){
try{
ds = new DriverManagerDataSource();
ds.setDriverClassName( "com.mysql.jdbc.Driver");
ds.setUrl( "jdbc:mysql://localhost:3306/adsense_adsense");
ds.setUsername( "USERNAME");
ds.setPassword( "PASSWORD");
System.out.println("Datasource is: "+ds.toString());
}catch(Exception e){
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException{
return ds.getConnection();
}
public void contextDestroyed(ServletContextEvent servletcontextevent){
}
}
最佳答案
如果您在 context.xml 中声明了一个 DataSource,Tomcat 会尝试使用它自己的类加载器而不是 Web 应用程序的类加载器来实例化它。所以WEB-INF/lib中的driver jar不在其classpath中,无法加载driver。
您没有更快看到 NPE 的原因是 JNDI 查找可能因 NamingException 而失败。您应该在部署时在日志中看到此异常的堆栈跟踪。
由于您使用的是 Spring,因此您可以从 Spring(使用独立连接池)创建 DataSource,而不是让 Tomcat 创建它。参见 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#jdbc-datasource
关于java - 部署在 mochahost 共享服务器上时出现 NullPointerException 获取连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8076697/
谁能解释一下 Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"之间的区别\") 和 Server.MapPath("/")? 最佳答案
我不知道,为什么我们要使用 Server.UrlEncode() & Server.UrlDecode()?!在 QueryString 中我们看到 URL 中的任何内容,那么为什么我们要对它们进行编
我已经通过 WHM 在我的一个域上安装了 ssl 证书。网站正在使用 https://xyz.com . 但是它不适用于 https://www.xyz.com .我已经检查了证书,它也适用于 www
我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityC
我们有 hive 0.10 版本,我们想知道是否应该使用 Hive Server 1 或 Hive Server2。另一个问题是连接到在端口 10000 上运行的 Hive 服务器,使用 3rd 方工
我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。 (我不想要客户端 S
我写了一个非常基本的类来发送电子邮件。我用 smtp 服务器对其进行了测试,它工作正常,但是当我尝试使用我公司的交换服务器时,它给出了这个异常: SMTP 服务器需要安全连接或客户端未通过身份验证。服
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
我有一个 Tomcat 服务器和一个 Glassfish4 服务器。我的 Servlet 在 Tomcat 服务器上启动得很好,但在 Glassfish4 服务器上给我一个“HTTP Status 4
我在 vmware 上创建了一个 ubuntu 服务器。我用它作为文件服务器。如果我通过托管虚拟机的计算机进行连接,则可以访问它。我无法从同一网络上的其他计算机执行此操作。提前致谢! 最佳答案 首先确
如何重启 Rails 服务器?我从 开始 rails server -d 所以服务器是分离的 我知道的唯一方法就是去做ps 辅助 | grep rails 并 kill -9关于过程#但是像这样杀死进
我实际上正在尝试找到编写一个简单的 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的服务器。我只关心XMPP的核心功能(状态、消息传递、群组消息传递)。目前还在学习 XMPP 协议(proto
我实际上正在尝试找到编写简单 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的方法。我只关心 XMPP 的核心功能(统计、消息、组消息)。目前也在学习 XMPP 协议(protocol),所以
我们正在尝试从 Java JAX-RS 适配器访问 SOAP 1.1 Web 服务。 我们正在使用从 WSDL 生成的 SOAP 客户端。 但是当解码 SOAP 故障时,我们得到以下异常: ... C
目前,我和许多其他人正在多个平台(Windows、OS X 和可能的 Linux)上使用 Python HTTP 服务器。我们正在使用 Python HTTP 服务器来测试 JavaScript 游戏
我有一个连续运行的服务器程序(C#/.NET 2.0 on Linux with mono),我想从 PHP 脚本连接到它以在网站上显示状态信息。 目的是创建一个(某种)实时浏览器游戏(无 Flash
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
我们刚刚将测试 Web 服务器从 Server 2008 升级到 Server 2012 R2。我们有一个部署我们网站的批处理脚本。当它将站点推送到服务器时,它现在失败了。奇怪的是,我可以使用相同的发
建议一些加载SpagoBI服务器的方法,我尝试了所有方法来解析spagobi服务器。在 Catalina 中,错误是 - * SEVERE: Unable to process Jar entry [
当我们点击应用程序服务器(apache tomcat)时,它会创建一个线程来处理我们的请求并与 tomcat 连接,建立连接,tomcat 创建另一个线程来处理请求并将其传递给连接,连接线程将其传递给
我是一名优秀的程序员,十分优秀!