Я знаю, что вы сказали, что не хотите получать его из контекста xml, но я не вижу легкого и не хрупкого пути вокруг него.
Весной 2.0 и выше вы можете использовать <util:property-path />
element для ссылки на свойство другого компонента. Допустим, что ваш DataSource
объявлен как так (примечание: Я собираюсь использовать p-namespace
во всем для краткости):
<bean id="dataSource" class="com.example.SimpleDataSource"
p:user="db_user"
p:password="letmein"
p:driverClass="com.example.CabDriver"
p:jdbcUrl="jdbc:example:@localhost:1729:magicdb" />
Я предполагаю, что ваш JdbcTemplate
используется каким-то объектом доступа к данным. Скажем, это выглядит следующим образом:
public class SimpleDao implements ExampleDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}
Так Spring конфигурации для построения этой DAO, как так:
<bean id="dao" class="com.example.SimpleDao"
p:dataSource-ref="dataSource" />
Теперь к нашей проблеме: как получить JdbcUrl
собственность в нашей DAO? Давайте добавим сеттер:
public class SimpleDao implements ExampleDao {
private String jdbcUrl;
// ...
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
// ...
И, наконец, мы вводим это, используя вышеупомянутый <util:property-path />
элемент:
<bean id="dao" class="com.example.SimpleDao"
p:dataSource-ref="dataSource">
<property name="jdbcUrl>
<util:property-path path="dataSource.jdbcUrl" />
</property>
</bean>
URL-адрес доступен из фасоли под названием dataSource
использованием getJdbcUrl
(заметим, что это на бетонном DataSource , а не интерфейс), поэтому элемент свойства-свойства указывает Spring, чтобы получить значение оттуда и использовать его как значение для свойства DAO.
Это не слишком много кода (это один сеттер и одно дополнительное свойство), и вы гарантированно должны иметь одинаковое значение, введенное в оба компонента.
Что DataSource вы используете? Что-то вроде c3p0? – jasonmp85