有没有办法在 Java 中记录 JdbcTemplate 的数据源连接 URL?
该字段存在于数据源中,但没有 getter 来访问它。当然,我可以从应用程序上下文 xml 中读取 DataSource 属性,但我想以其他方式执行此操作。
最佳答案
我知道你说过你不想从上下文 xml 中获取它,但我看不到一种简单且不易损坏的方法。
在 Spring 2.0 及更高版本中,您可以使用 <util:property-path />
element引用另一个 bean 的属性。假设您的 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);
}
}
因此构建这个 DAO 的 Spring 配置如下所示:
<bean id="dao" class="com.example.SimpleDao"
p:dataSource-ref="dataSource" />
现在我们的问题是:如何获取JdbcUrl
属性(property)进入我们的 DAO?让我们添加一个 setter :
public class SimpleDao implements ExampleDao {
private String jdbcUrl;
// ...
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
// ...
最后我们使用前面提到的 <util:property-path />
注入(inject)它元素:
<bean id="dao" class="com.example.SimpleDao"
p:dataSource-ref="dataSource">
<property name="jdbcUrl>
<util:property-path path="dataSource.jdbcUrl" />
</property>
</bean>
URL 可从名为 dataSource
的 bean 获得。使用getJdbcUrl
(请注意,这是在具体的 DataSource 上,而不是接口(interface)上),因此 property-path 元素告诉 Spring 从那里获取值并将其用作 DAO 属性的值。
这并不是太多的代码(它是一个 setter 和一个额外的属性),并且保证您始终将相同的值注入(inject)到两个 bean 中。
关于java - JdbcTemplate — 记录数据源连接 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2926961/