Spring Boot部署到Tomcat 6,Weblogic 10.3.6

 笔者遇到一个问题,基于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。










你可能感兴趣的:(Java,Spring,tomcat,weblogic)