笔者遇到一个问题,基于Spring Boot的war包,要发布到Weblogic 10.3.6上运行,而Weblogic 10.3.6只支持servlet 2.5, Spring Boot支持的servlet最低版本是2.5,Spring Boot的war包无法部署到Weblogic 上。在查阅许多资料过后,笔者成功将Spring Boot项目部署到了Weblogic 10.3.6。
因为Tomcat 6也只支持servlet2.5,所以笔者尝试将war包发布到Tomcat 6上运行(Weblogic 笔者电脑上刚开始的时候没有安装)。
以下是部署Spring Boot到Tomcat 6需要注意的地方,首先确认已经使用maven创建好自己的Spring Boot应用,并已经安装好Tomcat 6。
Spring Boot的项目结构如下:
-|SpringBootDemo
--|src
---|main
----|java
----|resources
---|test
--|target
--|pom.xml
main方法所在类继承SpringBootServletInitializer
,并覆盖configure方法:
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
在pom中加入如下依赖:
org.springframework.boot
spring-boot-legacy
1.1.0.RELEASE
该包是github上一个开源的项目,地址:
Spring Boot Support for Servlet 2.5
在pom文件中的spring-boot-starter-web依赖项上加入依赖排除,排除掉内嵌的tomcat包:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
或者你也可以直接添加以下依赖,用于在本地开发的时候使用内嵌的Tomcat容器进行测试:
org.springframework.boot
spring-boot-starter-tomcat
provided
在main文件下创建webapp\WEB-INF目录,并在该目录下创建web.xml配置文件,文件内容如下:
contextConfigLocation
main方法所在类的全路径名
org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener
appServlet
org.springframework.web.servlet.DispatcherServlet
contextAttribute
org.springframework.web.context.WebApplicationContext.ROOT
1
appServlet
/
做好这些工作后,将项目打成war包,发布到tomcat的webapps目录下,启动tomcat即可。
tips:
笔者在运行时发现,如果Spring Boot项目的配置文件中使用了server.*开头的配置属性,启动时依旧会报错,所以如果一定要运行在Tomcat 6上,
可以注释掉配置中的server.*开头的配置。
如果要指定Spring Boot运行时的profiles,可以在tomcat的配置文件中指定,,在%tomcat_home%\bin\catalina.bat文件中(windows环境下),加入以下内容:
set JAVA_OPTS="-Dspring.profiles.active=dev"
Spring Boot成功部署到了Tomcat 6,但是再将其部署到weblogic的时候,还是会有问题,在查阅Spring Boot的官方文档后,做了以下修改:
main方法所在类修改入下:
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
}
加粗部分为新增部分。
另外还需在WEB-INF/目录下新增weblogic.xml,内容如下:
org.slf4j
本部分内容,详见Spring Boot: Deploying a WAR to WebLogic
做了以上修改后,部署到weblogic10.3.6还是会有问题,原因是weblogic不支持JPA2,在查阅stackoverflow上的回答JPA Conflict with Hibernate and Weblogic 后,做出以下更改:
修改.\Oracle\Middleware\user_projects\domains\localhost\bin\setDomainEnv.cmd文件,在
set "CURRENT_DIR=%cd%"
这一行之后,添加以下内容:
@REM Add JARs for JPA 2.0 at the front of the class path.
set WLS_MODULES=%WL_HOME%\..\modules
set PRE_CLASSPATH=%WLS_MODULES%\javax.persistence_1.0.0.0_1-0-2.jar;%WLS_MODULES%\com.oracle.jpa2support_1.0.0.0_2-1.jar
其中的javax.persistence_1.0.0.0_1-0-2.jar包以及com.oracle.jpa2support_1.0.0.0_2-1.jar包为weblogic10.3.6自带的包,如果,读者可以根据自己weblogic目录下的包名进行适当替换。
做完这些操作过后,启动weblogic,部署war到weblogic即可。
如还有任何问题,请直接咨询,欢迎骚扰0.0。