我已经使用eclipse kepler创建了一个webapp,并且我使用了tomcat 7.0。
当我使用eclipse运行应用程序时,与我的数据库的连接工作正常,但是当我尝试使用tomcat运行它时,我没有连接到我的数据库。
这是创建连接的java类:
public class ConexionBD {
private static String host = null;
private static String db = null;
private static String username = null;
private static String password = null;
private static void RecuperarDatosConexion() {
try {
Document d = new SAXBuilder().build(new File(System.getProperty("user.home")+ "/config.xml"));
Element dbElement = d.getRootElement();
host = dbElement.getChildText("host");
db = dbElement.getChildText("db");
username = dbElement.getChildText("username");
password = dbElement.getChildText("password");
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection NuevaConexion() throws SQLException {
RecuperarDatosConexion();
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
StringBuilder ubicacionServicio = new StringBuilder();
ubicacionServicio.append("jdbc:mysql://");
ubicacionServicio.append(host);
ubicacionServicio.append("/");
ubicacionServicio.append(db);
return DriverManager.getConnection (
ubicacionServicio.toString(), username, password);
}
}
这是我的config.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<database>
<host>localhost</host>
<username>someuser</username>
<password>somepassword</password>
<db>stripped</db>
</database>
我做错了什么?
答案 0 :(得分:0)
这里的问题是对System.getProperty("user.home")
的调用,它将根据执行java应用程序的用户返回不同的值。
如果使用sudo
启动tomcat,则tomcat以root用户身份运行,这意味着/ root /将在user.home属性中返回。因此,您需要找出运行tomcat的用户并将该文件放在该特定用户下的目录中。
另一种更可靠的方法是在web.xml文件中将这些属性定义为:
<context-param>
<param-name>db.host</param-name>
<param-value>localhost</param-value>
</context-param>
<context-param>
<param-name>db.username</param-name>
<param-value>someuser</param-value>
</context-param>
<context-param>
<param-name>db.password</param-name>
<param-value>somepassword</param-value>
</context-param>
然后您可以在servlet中访问这些属性,如下所示:
String databaseHost = getServletContext().getInitParameter("db.username");
String databaseUser = getServletContext().getInitParameter("db.username");
String databasePassword = getServletContext().getInitParameter("db.password");