Azure грядет ...
В продолжении поста NAVObjectPermissionsReportWebApp. О чудный, дивный мир…
На волне оптимизма после отпуска задался я целью переписать приложение с использованием Spring Boot и… Azure SQL Database . Не без проблем, но все же удалось это сделать.
Первое, что понравилось при создании сервиса Azure - это то, что все как-то активно развивается.
В апреле 2016 года и в октябре 2016 года (прошло всего полгода), если сравнивать по ощущениям, - наполняемость этого виртуального магазина выросла.
В моде сейчас уже новый Azure портал и все вскоре, как я понял, будет только через него.
Почему собственно я пришел к мысли воспользоваться Azure SQL Database.
Первоначально я создал Spring Boot приложение с использованием локального MySQL и все работало. Проект представлен здесь.
Но вот при использовании удаленного сервиса ClearDB MySQL Database из Azure получаю 'max_user_connections' ошибку. Долго не мог понять. Оказалось, я использовал бесплатный сервис ClearDB MySQL Database, а там только 4 коннекта. А этот умный Spring при запущенном web приложении сразу снимает 10 коннектов.
Выбрать платный сервисный план (с большим числом коннектов) для сервиса ClearDB MySQL Database мне не удалось. Дебетовая карта к моему профилю в Azure не привязана. Я трачу только то, что дает MSDN подписка.
По идее, отсутствие карты не должно быть препятствием (деньги с MSDN подписки присутствуют на профиле), но вот c ClearDB MySQL Database такой фокус не прошел. Все-таки, провайдер этой услуги не сам MS. А вот с Azure SQL Database все прокатило. Спокойно списывает c MSDN лимита, даже без привязанной карты.
Выбрал минимальную конфигурацию на 5 DTU.
Тут стоит упомянуть что Azure SQL Database все-таки пока не совсем полностью все имеет что и обычный SQL Database.
Про лимиты можно почитать тут.
Моему простому приложению это все не помеха. Единственное, что пришлось столкнутся с тем, что данные можно закачать, похоже, только через bcp утилиту. Но зато качает быстро, не сравнить с тем, что мне пришлось ожидать при закачке в MySQL.
Подключаться к базе Azure SQL Database можно через обычный Microsoft SQL Server Management Studio
Редактировать структуру таблицы удобно через Microsoft SQL Server Data Tools
Главное тут не забыть про настройку Firewall в Azure. Почитать про это можно тут и тут .
В итоге запускаем bcp:
// Обратите внимание, что имя поля сделал pinsert вместо просто insert.. иначе ругалась система при построении запроса через Spring Data JPA (зарезервированное слово что ли.. так и не понял) и ругалась именно что при использовании Azure SQL Database, на MySQL не было проблемы.
По bcp приведу ключевой текст:
===
create template for .fmt file:
bcp data format nul -f C:\Users\alexef\IdeaProjects\data_format_csv.fmt -c -t ; -S alexef0test0navsqlserverazure.database.windows.net,1433 -d navobjectpermissionsreportsqldatabase -U <user> -P <password>
modify .fmt for skip first column:
---
11.0
13
1 SQLCHAR 0 80 ";" 2 modulename SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 80 ";" 3 objecttype SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 80 ";" 4 description SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 21 ";" 5 rangefrom ""
5 SQLCHAR 0 21 ";" 6 rangeto ""
6 SQLCHAR 0 10 ";" 7 pread SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 10 ";" 8 pinsert SQL_Latin1_General_CP1_CI_AS
8 SQLCHAR 0 10 ";" 9 pmodify SQL_Latin1_General_CP1_CI_AS
9 SQLCHAR 0 10 ";" 10 pdelete SQL_Latin1_General_CP1_CI_AS
10 SQLCHAR 0 10 ";" 11 pexecute SQL_Latin1_General_CP1_CI_AS
11 SQLCHAR 0 80 ";" 12 productline SQL_Latin1_General_CP1_CI_AS
12 SQLCHAR 0 21 ";" 13 moduleid ""
13 SQLCHAR 0 20 "\r\n" 14 versionname SQL_Latin1_General_CP1_CI_AS
---
load data:
bcp data in C:\Users\alexef\IdeaProjects\ObjectPermissionsexternal_CSV.csv -f C:\Users\alexef\IdeaProjects\data_format_csv.fmt -S alexef0test0navsqlserverazure.database.windows.net,1433 -d navobjectpermissionsreportsqldatabase -U <user> -P <password> -F2
===
Про создание собственно Spring Boot приложения много писать не буду (off-topic).
Единственное что прочитайте тут
И приведу строку для регистрации SQL драйвера в Maven:
===
mvn install:install-file -Dfile=C:\Distr\_Java\sqljdbcdownloadmicrosoft\sqljdbc_6.0.7728.100_enu\sqljdbc_6.0\enu\sqljdbc42.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.2 -Dpackaging=jar
===
Собственно, весь проект лежит: https://github.com/finn777/navobjectpermissionsreportwebappazuresqldatabase
И само приложение:
https://alexef0test0nav.azurewebsites.net/navobjectpermissionsreportwebappazuresqldatabase-1/
И вот что еще я обнаружил. Я пересоздал Tomcat сервис, что уже использовал ранее.
Удалил и создал с тем же именем. Потом сделал Deploy, в том числе, и старому приложению. Все отработало. Только теперь уже более новая версия Tomcat крутится.
// Все выставил в Newest что бы была свежая версия JVM. А то долго не мог понять почему свежее приложение ошибку ‘The requested resource is not available’ на локальном Tomcat не выдает, а на удаленном Tomcat выдает.
Приведу настройки:
Кстати добраться до настроечного tomcat-users.xml можно так:
И далее уже через обычный интерфейс, если задали Администратора.
Описанная конфигурация, по идее, должна списывать только за Azure SQL Database (3 фунта в месяц).
Tomcat сейчас в бесплатной конфигурации. Если что можно увеличить пропускную способность на платную, если не будет хватать (Для теста я делал Scale up до Basic и обратно во Free – все отрабатывает).
Пока посмотрю пользуются ли вообще чем-то.