Могу ли я использовать относительный путь в определении bean-компонента Spring? - PullRequest
3 голосов
/ 22 марта 2011

Есть ли способ использовать относительный путь, скажем, относительно пути к классу или / META-INF в файле определения Spring bean ? Это немного отличается от использования ServletContext для получения такой информации.

Например: я пытаюсь определить имя файла для встроенной базы данных H2.

<bean id="myDataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="org.h2.Driver"
    p:url="jdbc:h2:~/mydb;AUTO_SERVER=TRUE"
    p:username=""
    p:password="" />

~/mydb не так желателен, так как это зависит от того, как и где вы развертываете приложение, домашний каталог может отсутствовать ... как я могу сделать это для записи, например, /WEB-INF/dbstore/?

Кстати, я попробовал "classpath:", как и предполагалось, в этом случае он не работает.

1 Ответ

6 голосов
/ 22 марта 2011

Следующие префиксы ресурсов всегда действительны:

Таблица 4.1. Ресурсные строки

Prefix       Example                            Explanation
---------------------------------------------------------------------------
classpath: | classpath:com/myapp/config.xml  |  Loaded from the classpath.
file:      | file:/data/config.xml           |  Loaded as a URL, from the
           |                                 |  filesystem. [1]
http:      | http://myserver/logo.png        |  Loaded as a URL.
(none)     | /data/config.xml                |  Depends on the underlying
           |                                 |  ApplicationContext.

[1] Но см. Также Раздел 4.7.3, «Предупреждение о FileSystemResource» .

Источник: Ссылка на пружину> The ResourceLoader

Но я действительно не вижу, как относительные пути там вписываются. Возможно, вам следует разработать ваши требования.


Спасибо за дополнительную информацию. Вы правы, это не может работать в этом контексте

<bean id="myDataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="org.h2.Driver"
    p:url="jdbc:h2:~/mydb;AUTO_SERVER=TRUE"
    p:username=""
    p:password="" />

Spring никогда не анализирует этот URL JDBC, он просто передает его в bean-компонент. Я бы предложил использовать механизм PropertyPlaceHolderConfigurer :

<bean id="myDataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="org.h2.Driver"
    p:url="jdbc:h2:${dbpath};AUTO_SERVER=TRUE"
    p:username=""
    p:password="" />

<!-- example config -->
<context:property-placeholder location="classpath:com/foo/jdbc.properties"
                              systemPropertiesMode="override"  />

Теперь вы можете настроить путь в файле свойств на classpath или на системное свойство. На самом деле, вы, вероятно, хотите сделать что-то подобное (сделать настраиваемым весь URL, а не только имя схемы БД):

p:url="${dbpath}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...