Tomcat没有连接到我的数据库

时间:2014-03-29 18:03:50

标签: tomcat7

我已经使用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>

我做错了什么?

1 个答案:

答案 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");