Tomcat部署Java项目时,properties配置文件的路径问题

properties配置文件在Java项目中的使用非常广泛。Tomcat服务器也深受Java开发者的喜爱。

Java项目在使用druid数据库连接池的时候,通常将配置参数放在druid.properties文件中,并使用JBDCUtils工具类进行读取,而在读取的过程中,通常使用相对路径来确定文件的位置。 

Java项目的目录结构如图所示(IntelliJ IDEA)。配置文件druid.properties放在resources目录下,java/utils下的JDBCUtils类使用了该配置文件

Tomcat部署Java项目时,properties配置文件的路径问题_第1张图片

工具类JDBCUtils的内容如下。

package utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.DbUtils;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCUtils {
    private static DataSource druidDataSource;

    static {
        try {
            //读取properties配置文件
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            Properties properties = new Properties();
            properties.load(is);

            //使用DruidDataSourceFactory创建Druid数据库连接池
            druidDataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getCon() throws SQLException {
        return druidDataSource.getConnection();
    }

    public static void closeCon(Connection con) {
        DbUtils.closeQuietly(con);
    }
}

JDBCUtils类读取druid.properties文件,为什么会这么写呢?

  InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");

当Web工程打包成war并部署在Tomcat上的时候,工程的目录结构会发生变化。

使用maven工具打包成war,工程目录结构变成下图所示。

Tomcat部署Java项目时,properties配置文件的路径问题_第2张图片

原工程目录main/java和main/resources中的所有文件全部放到了WEB-INF/classes下,并且自己创建的文件夹并依然存在。

InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");

该语句获取JDBCUtils的类加载器,并从所在的目录下寻找druid.properties配置文件。类加载器所在的目录就是classes目录,也就是druid.properties文件的直接目录。

当Java工程部署到Tomcat之后,各个文件的相对路径也会发生变化,开发时应当注意IDEA和Tomcat工程目录的不同。

你可能感兴趣的:(java,tomcat)