java - JdbcTemplate — 记录数据源连接 url

标签 java spring logging jdbc datasource

有没有办法在 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/

相关文章:

java - 将批量操作作为中间流操作运行

java - 需要包含 externalclass.innerclass 的封闭实例

java - Spring 安全: handling SSO and DB users

java - 用于创建 JasperReport 后未释放池连接

必须指定 Spring Security authenticationmanager - 用于自定义过滤器

c# - 如何使用 ASP.Net vNext/5 登录到输出窗口

web-applications - 如何减少网络应用程序的冗余日志消息?

java - 相当于属性的 @CollectionElement (JPA)

java - 即使字符串包含子字符串,字符串也包含方法返回 false

Python 记录到 StringIO 处理程序