我的Spring配置看起来像
...
<bean id="myWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
...
<property name="sql" value="%[insert.sql.command]" />
==> <property name="dataSource" ref="outDataSource1" />
</bean>
<bean id="myWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
...
<property name="sql" value="%[insert.sql.command]" />
==> <property name="dataSource" ref="outDataSource2" />
</bean>
...
<bean id="outDataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="%[outds1.driverClassName]" />
<property name="url" value="%[outds1.url]" />
<property name="username" value="%[outds1.username]" />
<property name="password" value="%[outds1.password]" />
</bean>
<bean id="outDataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="%[outds2.driverClassName]" />
<property name="url" value="%[outds2.url]" />
<property name="username" value="%[outds2.username]" />
<property name="password" value="%[outds2.password]" />
</bean>
...
我想显示每个编写器(DataSource
类)中引用的JdbcBatchItemWriter
的信息。 DataSource
由Spring DriverManagerDataSource
实现。
例如,显示信息:
(DriverManagerDataSource).getUrl()
(DriverManagerDataSource).getUsername()
所以我将JdbcBatchItemWriter
包裹在JdbcBatchItemWriterWrapper
中,基于ApplicationContextAware
。
由于JdbcBatchItemWriter
没有getDataSource()
个getter,我需要以编程方式解析/实例化ref
属性dataSource
。我怎么能这样做?
答案 0 :(得分:0)
您可以拦截DataSource
的唯一地方是
setDataSource
来电之前
<property name="dataSource" ref="outDataSource2" />
一种解决方案是扩展JdbcBatchItemWriter
并覆盖其setDataSource
,记录传递给它的值,然后委托给super
实现。
不是提供JdbcBatchItemWriter
作为bean类,而是提供子类。