Maven profile ne amaçla kullanıldığıyla ilgili internetten çeşitli araştırmalar yapabilirsiniz. Ben çok detaya inmeden kendi kullanımımı anlatacağım size.
Java ile geliştirme yaptığım her projede 3 farklı profilim olur benim. dev , prep ve prod diye..
- dev : Development(geliştirme yaptığım) ortamını ifade eder
- prep : preProduction dan gelir. Test ortamını ifade eder.
- prod : production ortamını ifade eder.
Peki neden 3 farklı profil size kısaca anlatayım. Öncelikle genel olarak şirketlerde kodları geliştirdiğiniz bir makine oluyor(Bu size verilen laptop). Geliştirme işlemleri bitince sizden geliştirme isteyenlerin kodlarınızı görebilmesi ve test uzmanlarının sizin geliştirdiğiniz kodu test edebilmesi için bu projeye ait bir test sunucusu oluyor. Birde testlerden onay alındıktan sonra amacına hizmet etmek üzere kodları attığınız gerçek(Erişime açılan) sunucular...
Bir projenin geliştirilip yayına çıkması bu 3 aşamadan geçerek gerçekleşir. Dolayısıyla siz geliştirme yaparken localde kullandığınız veri tabanı bilgileri ayrı, testte kullandıklarınız ayrı ve prodda kullandıklarınız ayrı olacaktır. Bu farklılıklara istinaden projenizi deploy ederken ya her sunucunun bilgilerini elle güncelleyip, compile edip, deploy edeceksiniz, yada birazdan göstereceğim şekilde maven ile profil oluşturarak bu üç farklı sunucu için üç farklı ayar dosyası oluşturacaksınız. Ve compile ederken profil seçeceksiniz.
Kısacası ; localde çalışırken maven'a kodlarımı dev profiline göre compile et, teste giderken prep'e göre ve son olarak production a çıkarken prod'a göre compile et diyeceksiniz..
Kısacası ; localde çalışırken maven'a kodlarımı dev profiline göre compile et, teste giderken prep'e göre ve son olarak production a çıkarken prod'a göre compile et diyeceksiniz..
NOT : Bu yazıyı sadece 4 satırlık veri tabanı ayar dosyaları üzerinden örneklendiriyorum ancak gerçek ortamlarda kod yazarken bu ayar dosyalarının farklılıkları onlarca satırı bulur ve eğer profil kullanmazsanız her deploy etmede(dev+test+prod) bu onlarca satır kodu ilgili sunucuya göre değiştirmek durumunda kalırsınız.
şimdi örneklendirmeye geçiyorum.Geliştirme yaptığımız ortamda(development) bir MySQL veri tabanımız olsun erişim bilgileri aşağıdaki gibi olsun
url : localhost
user : root
pass : 12345
|
Birde bu geliştirmeleri yaptıktan sonra tester ların bu kodları test edebilmesi için bir test sunucusu olduğunu ve tabi bu sunucu içinde bir test veri tabanımız olsun.
url : 192.168.1.110
user : rootTest
pass : 12345Test
|
son olarak geliştirmeyi yaptık, testlerden geçti ürünün yayınlandığı gerçek ortam(production) olacak birde.
url : 192.168.1.111
user : rootProd
pass : 12345Prod
|
Hemen intelliJ ile bir web(Spring MVC) projesi oluşturup projemizi geliştirmeye başlayalım.
projenin son hali aşağıdaki yapıda olacaktır:
İlk olarak resources dizini altında üç profili ayırmak için üç dev , prod ve prep diye üç farklı dizin oluşturuyoruz. Her üç dizinin altında da config.properties dosyasını oluşturuyoruz.
Bu işlemlerden sonra xml dosyasında config dosyasını load edecek şekilde ayarlıyoruz. Bu işlemler için alttaki parametreyi mvc-dispatcher-servlet.xml dosyasına eklemek yeterlidir(classpath ten sonra gelen tüm .properties uzantılı dosyaları yükle anlamı taşır).
mvc-dispatcher-servlet.xml
<context:property-placeholder
location="classpath*:*.properties"/>
|
db.url = localhost
db.user = root
db.pass = 12345
|
db.url = 192.168.1.110
db.user = rootTest
db.pass = 12345Test
|
prod/config.properties
db.url = 192.168.1.111
db.user = rootProd
db.pass = 12345Prod
|
ayar dosyalarını da tanımladıktan sonra , controller'a giderek yüklenen ayar dosyasındaki değerleri okuyalım.
@Controller
@RequestMapping("/")
public class HelloController {
@Value("${db.url}")
public String dbUrl;
@Value("${db.user}")
public String dbUser;
@Value("${db.pass}")
public String dbPass;
@RequestMapping(method
= RequestMethod.GET)
public String
printWelcome(ModelMap model) {
model.addAttribute("message",
"Okunan Degerler!");
model.addAttribute("url",this.dbUrl);
model.addAttribute("pass",this.dbPass);
model.addAttribute("user",this.dbUser);
return
"index";
}
}
|
son olarak okunan değerlerin view edilmesi için index.jsp sayfasına aşağıdaki kodları ekleyelim.
index.jsp
<h3>${message}</h3>
<p><b>
user :</b>${user}</p>
<p><b>
pass :</b>${pass}</p>
<p><b>
url: </b>${url}</p>
|
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources/dev</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>prep</id>
<build>
<resources>
<resource>
<directory>src/main/resources/prep</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>prod</id>
<build>
<resources>
<resource>
<directory>src/main/resources/prod</directory>
</resource>
</resources>
</build>
</profile>
</profiles>
|
Hiç yorum yok:
Yorum Gönder