spring配置文件中excel的相对路径

时间:2014-02-12 12:36:59

标签: java spring excel web

我编写了一个程序来获取Excel的fire sql查询并获取数据。我已经为此目的使用了jdbc-odbc连接,如下所示。

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
c = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ="                            
                            + request.getSession().getServletContext().getRealPath("WEB-INF")+"\\TCCAddress.xls");
stmnt = c.createStatement();
String query = "select * from [TCC_001$]";
ResultSet rs = stmnt.executeQuery(query);

但我使用的是spring,我想使用spring数据源创建连接。我在下面试过但它不起作用。

<bean id="excelDB"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="sun.jdbc.odbc.JdbcOdbcDriver" />
        <property name="url">
            <value>jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=classpath:/WEB-INF/TCCAddress.xls</value>
        </property>
</bean>

它给出错误

Failure creating file.

如果我使用

<property name="url">
                <value>jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=D:/TCCAddress.xls</value>
</property>

它工作正常我可以连接到excel并获取数据。

如何为 TCCAddress.xls提供相对路径

注意我不想使用像“D:/TCCAddress.xls”这样的绝对路径

1 个答案:

答案 0 :(得分:1)

看到你的问题我认为你只需要xls文件的相对路径。一旦你得到了这条路,你就可以做更多的事情。

让我试着解释一下如何获得任何资源的相对路径。

假设您已将xls或任何类型的资源放入“/WEB-INF/classes/”。您可以通过查看war文件来检查此内容。

现在你想在部署之后想要那个资源的路径(这里资源是xls文件),那么你可以这样做

您可以通过这行代码获取路径。

String path = this.getClass().getResource("/WEB-INF/classes/xyz.xls").getPath();

这里war文件中的资源位置永远不会改变,而且你也知道。所以在getResource()方法中传递它。

此处您想要更改spring配置运行时,以便在您的问题中使用 BeanPostProcessor接口。它可用于为几个bean执行自定义实例化逻辑,而其他bean则基于每个bean进行定义。

你可以找到下面提到的两种方法

  1. postProcessAfterInitialization
  2. postProcessBeforeInitialization
  3. 阅读Spring社区Customizing beans using a BeanPostProcessorCustomizing configuration metadata with a BeanFactoryPostProcessor的文档。

    您可以通过它实现目标。