Запустите базу данных H2 в режиме сервера через Spring

Я хотел бы добиться совета Jon Skeet с парой большего количества подсказок:

  • , Если Вы пишете "сервер" и, вероятно, будете иметь большое количество параллелизма вставки, не используют Компактный SQL Microsoft. Его менеджер блокировок глуп. При использовании Компактного SQL не используйте сериализуемые транзакции (который, оказывается, значение по умолчанию для класса TransactionScope). Вещи развалятся на Вас быстро. Компактный SQL не поддерживает временные таблицы, и когда Вы пытаетесь моделировать их в сериализированных транзакциях, он делает rediculsouly глупые вещи, любят, берут x-блокировки на индексных страницах _sysobjects таблицы. Также это get's, действительно нетерпеливый о продвижении блокировки, даже если Вы не используете временные таблицы. При необходимости в последовательном доступе к нескольким таблицам лучший выбор состоит в том, чтобы использовать повторяемые транзакции чтения (для предоставления атомарности и целостности) и затем реализовать Вас, владеют hierarchal менеджером блокировок на основе объектов области (учетные записи, клиенты, транзакции, и т.д.), вместо того, чтобы использовать основанную на таблице строки страницы схему базы данных.

    , Когда Вы делаете это, однако, необходимо быть осторожными (как John Skeet, сказал) создать четко определенную иерархию блокировки.

  • при создании собственного менеджера блокировок используйте <ThreadStatic> поля, чтобы хранить информацию о блокировках, которые Вы берете и затем добавляете, утверждает каждый, где в менеджере блокировок, которые осуществляют Ваши правила иерархии блокировки. Это поможет выкорчевать потенциальные проблемы впереди.

  • В любом коде, который работает в потоке UI, добавьте, утверждает на !InvokeRequired (для winforms), или Dispatcher.CheckAccess() (для WPF). Необходимо так же добавить, что инверсия утверждает для кодирования, который работает в фоновых потоках. Тем путем люди, смотрящие на метод, будут знать, только путем рассмотрения его, что это распараллеливает требования. Утверждение также поможет поймать ошибки.

  • Утверждают как сумасшедший, даже в розничных сборках. (который означает бросать, но можно заставить броски быть похожими, утверждает). Дамп катастрофического отказа за исключением, которое говорит "Вас, нарушил правила поточной обработки путем выполнения этого", наряду с отслеживаниями стека, намного легче отладить тогда отчет от покупателя с другой стороны мира, который говорит, "что время от времени приложение просто замораживается на мне, или это выкладывает gobbly липкую грязь".

12
задан Lin 1 October 2009 в 10:14
поделиться

2 ответа

У вас есть:

<beans default-lazy-init="true" ...

в ваших файлах конфигурации Spring?

11
ответ дан 2 December 2019 в 20:41
поделиться

Вы уверены, что метод createTcpServer в классе Server действительно вызывается? Вы пытались установить там точку останова?

В учебнике H2 утверждается, как вы можете создавать и запускать сервер программным способом:

import org.h2.tools.Server;
...
// start the TCP Server
Server server = Server.createTcpServer(args).start();
...
// stop the TCP Server
server.stop();

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

РЕДАКТИРОВАТЬ:

Я пробовал вашу конфигурацию, и она у меня работает. Что заставляет вас думать, что сервер не запускается? Он ничего не выводит на стандартный вывод, однако процесс прослушивает порт 8043. Так что вроде нормально.

1
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: