Bir çox tərtibatçı Spring Boot tətbiqini buluda yerləşdirməyi sadə zənn edir: JAR faylı qur, mühit dəyişənlərini təyin et, verilənlər bazasına qoşul və burax. Lakin əslində yerli mühitdə problemsiz işləyən kod buludda dərhal çökməyə başlayır. Bir yaxın vaxtlarda multi-modul Spring Boot tətbiqini “Render” platformasına Docker, PostgreSQL, Redis, Flyway miqrasiyaları və Render Blueprint ilə yerləşdirən proqramçının qarşılaşdığı 5 əsas səhvi və onların həlli yollarını təqdim edirik.
1. Profil aktiv deyildi: MySQL'dən PostgreSQL'ə keçid
Yerli mühitdə MySQL işləyən tətbiq buluda qaldırılanda ilk cəhddə Communications link failure xətası verdi. Səbəb sadə idi: “Render” profili aktiv olmadığı üçün Spring Boot hələ də MySQL konfiqurasiyasını yükləyirdi. Həll yolu — SPRING_PROFILES_ACTIVE=render mühit dəyişənini təyin etmək və application-render.properties faylında PostgreSQL dialektini, Flyway qovluq yolunu təyin etməkdir.
2. Redis'in səhv təyin edilməsi
Render Blueprint'də Redis xidməti databases bloku altına deyil, services bloku altına yazılmalıdır. Əks halda REDIS_URL dəyişəni avtomatik daxil edilmir və Spring Boot “The URL '' is not valid” xətası ilə üzləşir. Doğru konfiqurasiya: type: redis ilə ayrıca xidmət kimi təyin etmək.
3. PostgreSQL JDBC URL-inin səhv formatı
Render'in verdiyi postgresql://user:password@host/database URL-i birbaşa JDBC üçün yararlı deyil. Spring/Hikari üçün jdbc:postgresql://host:5432/database formatı tələb olunur, istifadəçi adı və şifrə ayrıca ötürülməlidir. Müəllif xüsusi RenderDataSourceConfig Java konfiqurasiyası yazaraq URL-dən host, port, istifadəçi və şifrəni ayırıb düzgün JDBC URL-i yaradıb.
4. Flyway miqrasiyalarının MySQL sintaksisi
Yerli MySQL üçün yazılmış AUTO_INCREMENT, DATETIME(6), ENGINE=InnoDB kimi sintaksis PostgreSQL'də işləmir. Həll — PostgreSQL üçün ayrıca db/migration-pg qovluğu yaratmaq və Render profilində spring.flyway.locations ilə ona istiqamətləndirmək. Həmçinin flyway-database-postgresql asılılığını əlavə etmək lazım idi.
5. Hibernate ilə Flyway arasında toqquşma
Məlum oldu ki, PostgreSQL'də JSONB tipi Hibernate'in gözlədiyi JSON ilə uyğun gəlmir. Hibernate ddl-auto=validate rejimində səhv verdi. Məsləhət: istehsal mühitində spring.jpa.hibernate.ddl-auto=none təyin edib bütün sxem idarəsini Flyway'ə buraxmaq. Həmçinin, köhnə miqrasiyalar üçün düzəliş miqrasiyası yazılıb.
Nəticə: Yerli inkişaf infrastruktur fərziyyələrini gizlədir, bulud yerləşdirmə isə onları üzə çıxarır. Düzgün Render profili, Blueprint konfiqurasiyası, PostgreSQL'ə uyğun Flyway miqrasiyaları və datasource parseri ilə yerləşdirmə proqnozlaşdırıla bilən hala gəlir. Bu təcrübə göstərir ki, hər bir “kiçik” səhv əvvəlkinin üstünə gələrək tətbiqi daha stabil edir.


