Sebenernya spring boot sudah di embedd applicatoin server tomcat (hanya berisi web container, tidak bisa untuk java EE). Sehingga tidak perlu menggunakan application server lagi. Namun kadang orang karena sudah bayar application server lain, misal weblogic. dan ada beberapa aplikasi lain yang jalan di weblogic. Ingin mendeploy aplikasi spring boot di weblogic.
Secara tertulis harusnya tidak ada yang perlu dilakukan. Karena tujuan standarisasi J2EE adalah WAR/EAR bisa portable antar webserver. Namun kadang kenyataannya tidak, karena ada beberapa yang butuh fungsi spesifik app server, ataupun configurasi spesifik.
Sebenernya application server yang mahal mahal itu bisa dijalankan di local laptop kita dan kita bisa melakukan auto reloading, hot swap, debugging juga. Namun, berat 😀
Catatan : Kita hanya bisa di deploy di tomcat jika aplikasi kita hanya menggunakan web container seperti spring boot. Jika kita memakai spring dan API J2EE selain web container, maka kita tidak bisa menggunakan tomcat.
Strategi
Menggunakan profile untuk mengethaui aplikasi ini jalan di app server mana. Untuk konfigurasi bisa dinamis tergantung profile di setting di pom.xml. Dan untuk fungsi yang spesifik ke App Server, bisa di bikin interface dan implementasi di tomcat hanya dummy saja. Dependency injection tergantung profile.
Pom.xml
<profiles>
<profile>
<id>tomcat</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>${basedir}/src/main/webapp/WEB-INF/web-tomcat.xml</webXml>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
Application.properties
application.properties => default
application-tomcat.properties => jika menggunakna profile “tomcat”
Fungsi spesifik
@Component("weblogicAppServer")
@Profile("!tomcat")
public class WeblogicService implements AppServerSpecificFunctionInterface {
}
@Component("tomcatAppServer")
@Profile("tomcat")
public class TomcatService implements AppServerSpecificFunctionInterface {
}