Spec-Zone .ru
спецификации, руководства, описания, API

21.3.13. Используя Connector/J с Spring

21.3.13.1. Используя JdbcTemplate
21.3.13.2. Транзакционный Доступ JDBC
21.3.13.3. Объединение в пул соединения с Spring

Платформа Spring является платформой Java-приложения, разработанной для того, чтобы помочь в проектировании приложений, обеспечивая способ сконфигурировать компоненты. Метод, используемый Spring, является известным шаблоном разработки под названием Внедрение зависимости (см. Инверсию Контейнеров Управления и образца Внедрения зависимости). Эта статья сосредоточится на ориентированном на Java доступе к базам данных MySQL с Spring 2.0. Для тех, которые задаются вопросом, есть порт.NET Spring соответственно под названием Spring.NET.

Spring не является только системой для того, чтобы сконфигурировать компоненты, но также и включает поддержку аспектно-ориентированного программирования (AOP). Это - одно из основных преимуществ и основы для управления ресурсами Spring и управления транзакциями. Spring также обеспечивает утилиты для того, чтобы они интегрировали управление ресурсами с JDBC, и Быть в спящем режиме.

Для примеров в этом разделе будет использоваться база данных-образец мира MySQL. Первая задача состоит в том, чтобы установить источник данных MySQL через Spring. Компоненты в пределах Spring используют "бобовую" терминологию. Например, чтобы сконфигурировать соединение с сервером MySQL, поддерживающим мировую базу данных-образец, Вы могли бы использовать:

<util:map id="dbProps">    <entry key="db.driver" value="com.mysql.jdbc.Driver"/>    <entry key="db.jdbcurl" value="jdbc:mysql://localhost/world"/>    <entry key="db.username" value="myuser"/>    <entry key="db.password" value="mypass"/></util:map>

В вышеупомянутом примере мы присваиваем значения свойствам, которые будут использоваться в конфигурации. Для конфигурации источника данных:

<bean id="dataSource"       class="org.springframework.jdbc.datasource.DriverManagerDataSource">    <property name="driverClassName" value="${db.driver}"/>    <property name="url" value="${db.jdbcurl}"/>    <property name="username" value="${db.username}"/>    <property name="password" value="${db.password}"/></bean>

Заполнители используются, чтобы обеспечить значения для свойств этого боба. Это означает, что можно определить все свойства конфигурации в одном месте вместо того, чтобы ввести значения для каждого свойства на каждом бобе. Мы действительно, однако, нуждаемся в еще одном бобе, чтобы вытянуть это все вместе. Последний боб ответственен за фактический заменение заполнителей значениями свойств.

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    <property name="properties" ref="dbProps"/></bean>

Теперь, когда нам сконфигурировали наш источник данных MySQL и готовый пойти, мы пишем некоторый код Java, чтобы получить доступ к нему. Пример ниже получит три случайных города и их соответствующую страну, используя источник данных, который мы сконфигурировали с Spring.

// Create a new application context. this processes the Spring configApplicationContext 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 DataSourceUtilsConnection 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);}

Это очень подобно нормальному доступу JDBC к MySQL с основным различием, являющимся этим, мы используем DataSourceUtils вместо DriverManager, чтобы создать соединение.

В то время как это может походить на небольшую разницу, импликации несколько далеко достигают. Spring управляет этим ресурсом в пути, подобном контейнерному источнику управляемых данных в сервере приложений J2EE. Когда соединение открывается, к нему можно впоследствии получить доступ в других частях кода, если оно синхронизируется с транзакцией. Это позволяет обработать различные части Вашего приложения как транзакционные вместо того, чтобы раздать соединение с базой данных.