Может ли приложение Spring MVC быть многопоточным, даже если его сервлеты нет? - PullRequest
5 голосов
/ 12 мая 2011

Когда вы говорите о многопоточном приложении Spring, вы обязательно обращаетесь к тому, являются ли сервлеты, определенные в этом приложении, многопоточными?

Или приложение Spring может быть настроено на многопоточность, даже если сервлетыв приложении не многопоточные?

Ответы [ 4 ]

7 голосов
/ 12 мая 2011

Однопоточные сервлеты больше не поддерживаются. Они давно устарели, поэтому все сервлеты являются многопоточными.

Тогда пружина не использует сервлеты (кроме одного - диспетчера). Он использует бины, которые могут быть контроллерами, сервисами и репозиториями (daos).

Эти бины являются поточно-ориентированными (что, я полагаю, вы подразумеваете под "многопоточностью"), если они не содержат никаких данных в своих полях (кроме своих зависимостей)

Короче - не храните никаких данных в ваших бобах. Передайте все необходимые данные в качестве параметров.

4 голосов
/ 12 мая 2011

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

Когда вы говорите о сервлетах, если два запросаодновременно входить в один и тот же сервлет, соответствующий код сервлета выполняется дважды одновременно.В таких средах, как Struts или Spring, которые делегируют запросы объектам, можно повторно использовать один и тот же экземпляр компонента или создать новый экземпляр компонента для каждого запроса в зависимости от того, как настроена ваша структура (т. Е. Использовать прототипы или синглтоны вдело весны)

3 голосов
/ 12 мая 2011

Если я правильно понимаю ваш вопрос, самим сервлетам (или Java-бобам) не нужно беспокоиться о многопоточности. Чтобы создать несколько потоков, вы должны создать многопоточные шаги или параллельные шаги, выполнив следующие действия в вашей конфигурации шагов:

Многопоточный шаг:

<step id="loading"> <tasklet
task-executor="taskExecutor"
throttle-limit="20">...</tasklet>
</step>

Параллельный шаг:

<job id="job1">
<split id="split1" task-executor="taskExecutor" next="step4">
    <flow>
        <step id="step1" parent="s1" next="step2"/>
        <step id="step2" parent="s2"/>
    </flow>
    <flow>
        <step id="step3" parent="s3"/>
    </flow>
</split>
<step id="step4" parent="s4"/>

Эти примеры можно найти и прокомментировать более подробно здесь .

3 голосов
/ 12 мая 2011

Spring MVC использует один диспетчерский сервлет, который будет вызывать определенные Controller с.При этом Controller должен быть не сохраняющим состояния, за исключением бинов, добавляемых Spring.Изменение состояния одного контроллера с помощью одного действия может повлиять на другое действие.

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