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 лимита, даже без привязанной карты. 1_navobjectpermissionsreportsqldatabase

Выбрал минимальную конфигурацию на 5 DTU.

Тут стоит упомянуть что Azure SQL Database все-таки пока не совсем полностью все имеет что и обычный SQL Database.

Про лимиты можно почитать тут.

Моему простому приложению это все не помеха. Единственное, что пришлось столкнутся с тем, что данные можно закачать, похоже, только через bcp утилиту. Но зато качает быстро, не сравнить с тем, что мне пришлось ожидать при закачке в MySQL.

Подключаться к базе Azure SQL Database можно через обычный Microsoft SQL Server Management Studio 2_microsoft-sql-server-management-studio

Редактировать структуру таблицы удобно через Microsoft SQL Server Data Tools 3_microsoft-sql-server-data-tools

Главное тут не забыть про настройку Firewall в Azure. Почитать про это можно тут и тут .

В итоге запускаем bcp:

4_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/ 5_app

И вот что еще я обнаружил. Я пересоздал Tomcat сервис, что уже использовал ранее.

Удалил и создал с тем же именем. Потом сделал Deploy, в том числе, и старому приложению. Все отработало. Только теперь уже более новая версия Tomcat крутится.

// Все выставил в Newest что бы была свежая версия JVM. А то долго не мог понять почему свежее приложение ошибку ‘The requested resource is not available’ на локальном Tomcat не выдает, а на удаленном Tomcat выдает.

Приведу настройки:

6_Tomcat1 7_Tomcat2

Кстати добраться до настроечного tomcat-users.xml можно так: 8_Tomcat3 9_Tomcat4

 

И далее уже через обычный интерфейс, если задали Администратора.

10_Tomcat5

Описанная конфигурация, по идее, должна списывать только за Azure SQL Database (3 фунта в месяц).

Tomcat сейчас в бесплатной конфигурации. Если что можно увеличить пропускную способность на платную, если не будет хватать (Для теста я делал Scale up до Basic и обратно во Free – все отрабатывает).

Пока посмотрю пользуются ли вообще чем-то.

Тулов для мониторинга в Azure много: 11_Monitor1 12_Monitor2 13_Monitor3