我创建了一个Spring Boot应用程序。它在独立模式下正常运行。我的下一步是生成一个可以由嵌入式Jetty Server实例(版本9.2)加载的WAR文件。
我设法生成一个WAR文件。但是,默认情况下不会解释Spring Boot注释并且Spring Boot本身没有加载(即当我打开与应用程序关联的URL时,会列出WAR文件)。
我发现启动Spring Boot的一种方法是在 WEB-INF 中添加 web.xml 文件,其中包含启用组件的应用程序上下文扫描。这样,Spring Boot由嵌入式Jetty服务器加载。但是,看起来某些应用程序属性(来自 META-INFO / application.properties 文件)未被评估:例如spring.jpa.hibernate.ddl-auto=update
无效,而create-drop
则被使用。
我能够重新配置一些bean来使一些应用程序属性工作,但不是最后一个与hibernate相关的。看起来所有Spring自动配置都没有启用。
是否有意义将Spring启动应用程序打包为部署在Jetty上的WAR而不使用 web.xml 或至少使用通用配置启用所有Spring自动配置?
以下是与创建嵌入式Jetty服务器相关的代码:
Server server = createHttpServer(properties, restPort, httpsEnabled);
server.setStopAtShutdown(true);
HandlerList handlerList = new HandlerList();
addWarsToHandlerList(handlerList);
server.setHandler(handlerList);
server.start();
方法addWarsToHandlerList
只是调用以下方法,以便在应用服务器上部署所有WAR存档:
private static void addWarFile(HandlerList handlerList, File file) {
String contextPath = "/" + FilenameUtils.getBaseName(file.getName());
WebAppContext webApp = createWebAppContext(contextPath);
webApp.setWar(file.getAbsolutePath());
handlerList.addHandler(webApp);
logger.debug("Deploying " + contextPath + " using war file " + file);
}
此后,Web配置。首先是我的 web.xml :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextAttribute</param-name>
<param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
以及前一个使用的 applicationContext.xml 文件:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="my.package"/>
<bean id="appConfigProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:application.properties"/>
</bean>
<bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000"/>
</bean>
</beans>
欢迎任何评论,建议等。
答案 0 :(得分:0)
加载了Spring自动配置,但application.properties
文件没有加载。解决方案是将@PropertySource与我的应用程序类一起使用:
@PropertySource("classpath:application.properties")
public class Application extends WebMvcConfigurerAdapter {
...
}