現在、xmlをJava configに変換しています。しかし、数日間調査している部分で立ち往生しています。ここで問題が発生します。
Xml構成:
_ <jee:jndi-lookup id="dbDataSource" jndi-name="${db.jndi}" resource-ref="true" />
<beans:bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate" >
<beans:property name="dataSource" ref="dbDataSource"></beans:property>
</beans:bean>
_
これまでのところ、私はこのコードを変換することができました:
_<jee:jndi-lookup id="dbDataSource" jndi-name="${db.jndi}" resource-ref="true" />
_
これに:
_@Bean(name = "dbDataSource")
public JndiObjectFactoryBean dataSource() {
JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
bean.setJndiName("${db.jndi}");
bean.setResourceRef(true);
return bean;
}
_
この :
_ <beans:bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate" >
<beans:property name="dataSource" ref="dbDataSource"></beans:property>
</beans:bean>
_
これに:
_@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() {
JdbcTemplate jt = new JdbcTemplate();
jt.setDataSource(dataSource);
return jt;
}
_
問題はメソッドですsetDataSource() DataSourceオブジェクトが必要ですが、両方のBeanを関連付ける方法がわかりません。JndiObjectFactoryBeanをDataSourceに渡す方法は?
または、別の方法を使用する必要がありますか?
追加の質問:
bean.setJndiName("${db.jndi}")
、$ {db.jndi}はプロパティファイルを参照していますが、常にNameNotFoundExceptionが発生します、それを機能させる方法は?
ありがとう!
JndiObjectFactoryBean
の代わりにJndiDataSourceLookup
を使用してください。メソッドで${db.jndi}
を使用するには、メソッド引数を宣言し、それに@Value
アノテーションを付けます。
@Bean(name = "dbDataSource")
public DataSource dataSource(@Value("${db.jndi}" String jndiName) {
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
return lookup.getDataSource(jndiName);
}
自動配線されたメソッドとコンストラクターは、
@Value
アノテーションを使用することもできます。 --Springリファレンスガイド。
@Bean
メソッドは基本的にファクトリメソッドであり、自動配線メソッドでもあるため、このカテゴリに分類されます。
JdbcTemplate
のファクトリメソッドでは、DataSource
メソッド引数を使用してデータソースへの参照を取得できます(複数ある場合は、メソッド引数に@Qualifier
を使用できます使用するものを指定します)。
@Bean
public JdbcTemplate jdbcTemplate(DataSource ds) {
return new JdbcTemplate(ds);
}