2016-09-05 3 views
0

У меня есть контроллер, обслуживание и дао класс синглтонКак достичь параллелизма с БД?

Dao Класс:

@Autowired 
JdbcTemplate jdbcTemplate; 

    @Override 

    public String addUsers(UserDTO userDto) throws Exception { 
     // TODO Auto-generated method stub 
     System.out.println("JDBC TEMPLATE::"+jdbcTemplate); 
     String query="Insert into users values('"+userDto.getUserName()+"')"; 
     System.out.println(query); 
    jdbcTemplate.update(query); 
    return "success"; 
    } 

applicationContext.xml

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



<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" > 

     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/demo" /> 
     <property name="username" value="" /> 
     <property name="password" value="" /> 
    </bean> 

В классе дао я использую JdbcTemplate, который определяется как синглтон и DataSource боба также Singleton.

Теперь я следующие сомнения:

1) Если мой JdbcTemplate является синглтон и DataSource боб одноточечно они будут вызывать какие-либо проблемы для одновременного запроса?

2) Это идеальный способ сделать JdbcTemplate bean и вводить в DAo?

3) Является ли область запроса только там, если какие-либо переменные экземпляра класса?

ответ

1

Чтобы иметь возможность работать одновременно с вашей БД, я бы предложил вам использовать пул соединений.

Когда несколько запросов будут «поступать» одновременно, для каждого из них пул соединений назначит выделенное соединение для работы с БД.

Конечно, это зависит от вашей ответственности, чтобы убедиться, что вы не получаете доступ к той же «области» в своей БД.

В БД MySql я знаю, что для таких сценариев существует механизм блокировки, но я бы рекомендовал провести более глубокие исследования.

Есть 2 известных пулов соединений:

  1. Apache ГСБД http://commons.apache.org/proper/commons-dbcp/
  2. c3po http://www.mchange.com/projects/c3p0/

Более подробное объяснение:

Пулы соединений

Это техника разрешить чтобы использовать кешированный набор общих и многоразовых объектов соединения, обеспечивающих доступ к базе данных.

Открытие/закрытие соединений с базой данных является дорогостоящим процессом, и поэтому пулы соединений улучшают производительность выполнения команд в базе данных, для которых мы поддерживаем объекты подключения в пуле.

Это облегчает повторное использование одного и того же объекта соединения для обслуживания нескольких клиентских запросов.

Каждый раз, когда клиентский запрос получен, пул ищет доступный объект подключения, и очень вероятно, что он получит бесплатный объект подключения.

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

Как только запрос завершается с использованием объекта соединения, объект возвращается обратно в пул, из которого он назначен одному из запрошенных в очереди запросов (на основе того, какой алгоритм планирования используется конкретная реализация пула соединений для обслуживания запросов в очереди) ,

+0

отлично! спасибо за объяснение, я уже много исследовал, и теперь я очень четко понимаю, что благодарю за ваши усилия. :) –

Смежные вопросы