6

このSpring JDBCのページは言う

DataSourceUtils クラスは ... JNDI から接続を取得するための静的メソッドを提供します

ただし、DataSourceUtils の API ドキュメントには、私が見る限り、前述の静的メソッドは含まれていません。

私は何が欠けていますか?

4

3 に答える 3

10

私が理解しているように、あなたにとって本当に役立つのはJndiObjectFactoryBeanです。この Spring ファクトリー Bean は、JNDI で公開されたオブジェクトを返します。

このように設定すると、注入されたConnectionを使用して取得できます。DataSourceUtilsDataSource

<bean name="myDataSourceInJndi" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:comp/env/jdbc/MyDataSource</value>
    </property>
</bean>

<bean name="myBean" class="MyClass">
...
    <property name="dataSource" ref="myDataSourceInJndi">        
...
</bean>
于 2010-09-09T10:40:32.103 に答える
3

うーん...どういうわけか、のJavadocDataSourceUtilsはより「正確」です(つまり、ドキュメントは間違っていませんが、技術的には、DataSourceから接続を取得します-これはJNDIを介して取得できます):

から JDBC 接続を取得するための静的メソッドを提供するヘルパー クラスDataSource

そして、次のメソッドはあなたが探しているものでなければなりません:

基本的な例 ( MySQL のドキュメントから):

// Create a new application context. this processes the Spring config
ApplicationContext ctx = new ClassPathXmlApplicationContext("ex1appContext.xml");
// Retrieve the data source from the application context
DataSource ds = (DataSource) ctx.getBean("dataSource");
// Open a database connection using Spring's DataSourceUtils
Connection c = DataSourceUtils.getConnection(ds);
try {
    // retrieve a list of three random cities
    PreparedStatement ps = c.prepareStatement(
        "select City.Name as 'City', Country.Name as 'Country' " +
        "from City inner join Country on City.CountryCode = Country.Code " +
        "order by rand() limit 3");
    ResultSet rs = ps.executeQuery();
    while(rs.next()) {
        String city = rs.getString("City");
        String country = rs.getString("Country");
        System.out.printf("The city %s is in %s%n", city, country);
    }
} catch (SQLException ex) {
    // something has failed and we print a stack trace to analyse the error
    ex.printStackTrace();
    // ignore failure closing connection
    try { c.close(); } catch (SQLException e) { }
} finally {
    // properly release our connection
    DataSourceUtils.releaseConnection(c, ds);
}
于 2010-09-08T23:59:42.143 に答える