Пул базы данных - подключение к базе данных Mysql в Spring3 MVC - PullRequest
2 голосов
/ 23 января 2012

Я пытаюсь подключиться к базе данных mysql в моем первом Spring Project, и мне кажется, что я упускаю что-то действительно простое.

У меня есть этот bean-компонент в моем файле application-context.xml, который закомментирован!

<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="${jdbc.driverClassName}"
      p:url="${jdbc.url}"
      p:username="${jdbc.username}"
      p:password="${jdbc.password}" />

Я знаю, что это будет звучать глупо, но чтобы создать класс, который подключается к базе данных Mysql с использованием JDBC и Spring JDBCTemplate, что мне делать здесь?

Я не понимаю, как заполнять свойства в приведенном выше bean-компоненте, могу ли я сделать это в суперклассе, как это, а затем расширить его подклассы.

import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class JdbcDao {
     protected DriverManagerDataSource dataSource = new DriverManagerDataSource();
     JdbcDao(){
         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
         dataSource.setUrl("jdbc:mysql://localhost/db_name");
         dataSource.setUsername("bcash");
         dataSource.setPassword("");        
     }    
}

Я в замешательстве, поэтому любая помощь действительнооценил,

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Если вы используете Tomcat в качестве сервера приложений, вы можете сделать что-то более похожее на это.

Определите соединение с именем пользователя / паролем в файле context.xml вашего сервера (в отличие от приложения):

<Resource name="jdbc/resourceNameToUse"
          auth="Container"
          type="javax.sql.DataSource"
          username="<UserName>"
          password="<Password>"
          driverName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/db_name"
          maxActive="100"
          maxIdle="5"
          validationQuery="Select 1"
          useCompression="true" />

Затем, когда вы конфигурируете Spring, вы создаете источник данных, который ищет ресурс, определенный выше, используя JNDI:

  <bean id="targetDataSource" 
        class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" 
              value="java:comp/env/jdbc/resourceNameToUse"/>
  </bean>
  <bean id="dataSource" 
        class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    <property name="targetDataSource">
      <ref local="targetDataSource"/>
    </property>
  </bean>

На этом этапе вы можете создать экземпляр вашего JdbcTemplate.как bean-компонент Spring, который ссылается на ваш источник данных:

  <bean id="jdbcTemplate"
        class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource">
      <ref bean="dataSource" />
    </property>
  </bean>

Если вы используете Spring 3, вы можете просто пометить JdbcTemplate в вашем DAO как @AutoWired, и Spring сопоставит имя переменной с идентификатором bean-компонентаВы определили и внедрили JdbcTemplate для вас.Если вы не используете Spring 3, вы можете просто внедрить JdbcTemplate при определении вашего компонента DAO.

public class MyDao {
    @AutoWired
    private JdbcTemplate jdbcTemplate;
}
1 голос
/ 23 января 2012

См. JdbcTemplate Best Practices для получения дополнительной информации.

Nutshell: нет, ваш DAO не будет создавать новый источник данных через new; это побеждает цель использования Spring. Реализации должны быть внедрены, а не созданы непосредственно; примерно:

public class TheDaoImpl implements TheDao {

    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    // JDBC-backed implementations of TheDao follow...
}

Затем в вашей конфигурации Spring (если не используются аннотации), также примерно:

<bean id="theDao" class="com.bar.plugh.TheDaoImpl" p:dataSource-ref="dataSource" />

(При этом используется установщик; вы также можете использовать аннотацию и пропустить конфигурацию XML.)

Вы также можете использовать JdbcTemplate в качестве базового класса и сэкономить больше энергии.

Я рекомендую перейти к Доступу к данным с использованием справочных документов JDBC (если вы используете JDBC) или к соответствующему разделу, непосредственно связанному с выбором ORM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...