快速创建一个springboot web工程
以intellij idea为例:
1、首先创建一个项目,创建时选择spring initializr,然后next,如下图:
2、填写项目信息,如下图:
3、勾选web
4、最后一步,填写工程名字点击finish
第一次创建时系统会去下载需要的依赖,耗时稍长,请耐心等待。
创建成功后,目录结构如下:项目的根目录下会有一个artifactid+application命名规则的入口类,springbootlearningapplication
springbootlearningapplication这个类有一个@springbootapplication注解,这是整个spring boot的核心注解,它的目的就是开启spring boot的自动配置。
@restcontroller注解,使之变为一个controller,然后再在里边提供一个地址转换方法,如下:
main方法中,右击选择run,项目启动完成后,就可以在浏览器中直接访问了。
访问路径是http://localhost:8080。
tip:
如果是第一次创建会发现,文件上带有红圈,文件内容不可更改,如下进行设置:
如何将已有项目改造为spring boot项目
1创建可部署的war文件
生成可部署war文件的第一步是创建一个 springbootservletinitializer的子类并重写它的configure方法。这样就可以利用spring servlet 3.0的支持,并允许在servlet容器启动时配置你的应用程序。通常,main方法所在的类需要继承
springbootservletinitializer:
1
2
3
4
5
6
7
8
9
10
11
|
@springbootapplication
public class application extends springbootservletinitializer {
@override
protected springapplicationbuilder configure(springapplicationbuilder application) {
return application.sources(application. class );
}
public static void main(string[] args) throws exception {
springapplication.run(application. class , args);
}
}
|
下一步是更新构建配置,以便您的项目生成war文件而不是jar文件。如果你使用maven并使用spring-boot-starter-parent(它为你配置maven的war插件),你所需要做的就是修改pom.xml文件把工程更改为war工程:
1
|
<packaging> war </ packaging>
|
如果你使用gradle,你需要修改build.gradle以将war插件用到项目中:
1
|
apply plugin: 'war'
|
最后一步是确保内置servlet容器不会干扰要部署war文件的servlet容器。为此,您需要按给定方式声明内置servlet容器依赖关系。
maven:
1
2
3
4
5
6
7
8
9
|
<dependencies>
<!-- … -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-tomcat</artifactid>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
|
gradle:
1
2
3
4
5
|
dependencies {
// ...
providedruntime 'org.springframework.boot :spring-boot-starter-tomcat'
// ...
}
|
[注意]
如果您使用的gradle版本仅支持仅编译依赖项(2.12或更高版本),则应继续使用providedruntime。在其他某些限制条件内, 如果compileonly依赖不在测试类的路径中,这将导致任何基于web的集成测试将失败。
如果您使用spring boot构建工具,那么将内置servlet容器依赖关系标记为已提供将产生一个可执行文件,并在目录中打包提供的依赖lib-provided关系。这意味着,除了被部署到一个servlet容器,也可以使用运行应用程序java -jar的命令行上。
看一下spring boot的示例应用程序,用于上述配置的基于maven的示例 。
2为旧的servlet容器创建可部署的war文件
较旧的servlet容器不支持servlet 3.0中使用的servletcontextinitializer引导进程。 但你仍可以在这些容器中使用spring和spring boot,只是需要添加一个web.xml到应用程序中,并配置它通过dispatcherservlet加载一个applicationcontext。
3将现有应用程序转换为spring boot
对于非web应用程序应该很容易(applicationcontext通过调用替换为springapplication或 springapplicationbuilder)。spring mvc应用程序通常需要先创建可部署的war应用程序,然后将其迁移到可执行的war或jar。jar转war指南
创建一个继承自springbootservletinitializer(例如,在一个叫做类application)的可部署war包,并添加spring boot的
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@springbootapplication 注解。例:
@springbootapplication
public class application extends springbootservletinitializer {
@override
protected springapplicationbuilder configure(springapplicationbuilder application) {
//自定义应用程序或调用application.sources(...)添加源
//因为我们的例子本身是一个@configuration类(通过@springbootapplication)
//我们实际上不需要重写这个方法。
return application;
}
}
|
记住,无论你放在什么sources只是一个spring applicationcontext,通常已经运行东西都继续在这里运行。可能有一些bean你可以以后删除,让spring boot为它们提供自己的默认值,但某些工作应优先进行。
静态资源可以移动到/public(或/static或)/resources或 /meta-inf/resources)在类路径根目录中。messages.properties(spring boot在类路径的根目录中自动检测到这一点)也是如此。
vanilla对spring dispatcherservlet和spring security的使用不需要进一步的修改。如果你的应用程序还有其他特性,如使用其他servlet或过滤器,那么你需要添加一些配置到application context。web.xml中替换的标签如下:
- 一个在容器中的servlet或servletregistrationbean类型的带有@bean注解的类会被构建安装,如果它在web.xml中被或中被配置的话。
- 一个filter或filterregistrationbean类型的带有@bean注解的类,其运行方式就像先前被和配置的类。
- 一个在xml文件中的applicationcontext添加一个@import注解就可以添加进application。或者在已经大量使用注解配置的情况下在几行代码中重新定义@bean注解。
为使war包运行,便需向应用程序中添加一个可执行的main方法,如
1
2
3
|
public static void main(string[] args) {
springapplication.run(application. class , args);
}
|
[注意]
如果打算将应用程序打为war或可执行应用程序,需要共享建设者的自定义中,可以执行springbootservletinitializer回调方法和main方法,就像这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@springbootapplication
public class application extends springbootservletinitializer {
@override
protected springapplicationbuilder configure(springapplicationbuilder builder) {
return configureapplication(builder);
}
public static void main(string[] args) {
configureapplication( new springapplicationbuilder()).run(args);
}
private static springapplicationbuilder configureapplication(springapplicationbuilder builder) {
return builder.sources(application. class ).bannermode(banner.mode.off);
}
}
|
应用程序可以分为多个类别:
- 没有web.xml的servlet 3.0+应用程序。
- 带有web.xml的应用程序。
- 具有上下文层次结构的应用程序。
- 没有上下文层次结构的应用程序。
所有这些都应该适合转译,但每个可能需要略有不同的技巧。
如果已经使用spring servlet 3.0+初始化程序支持类,servlet 3.0+应用程序就很容易转译。通常现存在 webapplicationinitializer上的所有代码都可以迁移到springbootservletinitializer。如果现有的应用程序有多个applicationcontext(例如,使用 abstractdispatcherservletinitializer),那么可以将所有的上下文源合并为单个springapplication。其中可能遇到的问题是,如果程序运行失败,就需要维护上下文层次结构。请参阅 构建一个层次的条目的例子。包含web特定功能的现有父上下文通常需要分解,以便所有servletcontextaware组件都在子上下文中。
非spring应用程序的应用程序会更容易转换为spring boot应用程序,上述指导可能会有所帮助,但过程可能会有所不同。
4将war部署到weblogic
要将spring boot应用程序部署到weblogic,必须确保您的servlet初始化程序直接实现webapplicationinitializer(即使您从已实现它的基类扩展)。
weblogic的典型初始化方法:
1
2
3
4
5
6
7
8
|
import org.springframework.boot.autoconfigure.springbootapplication;
import org.springframework.boot.context.web.springbootservletinitializer;
import org.springframework.web.webapplicationinitializer;
@springbootapplication
public class myapplication extends springbootservletinitializer implements webapplicationinitializer {
}
|
如果使用logback,您还需要告诉weblogic更合适打包的版本,而不是预先安装的版本。您可以通过添加一个web-inf/weblogic.xml文件来做到这一点 ,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?xml version= "1.0" encoding= "utf-8" ?>
<wls:weblogic-web-app
xmlns:wls= "http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http: //java.sun.com/xml/ns/javaee
http: //java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd
http: //xmlns.oracle.com/weblogic/weblogic-web-app
http: //xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
<wls:container-descriptor>
<wls:prefer-application-packages>
<wls: package -name>org.slf4j</wls: package -name>
</wls:prefer-application-packages>
</wls:container-descriptor>
</wls:weblogic-web-app>
|
5在旧(servlet 2.5)容器中部署war
spring boot使用servlet 3.0 api来初始化servletcontext(寄存器servlets 等),所以你不能在servlet 2.5容器外使用相同的应用程序。但是,可以在旧容器上借助于特殊工具来运行spring boot。如果你添加org.springframework.boot:spring-boot-legacy作为依赖(单独维护 spring boot的核心,目前在1.0.2.release),你所需要做的是创建web.xml并声明一个context listener、 application context、filters 、servlets 。这个context listener对于spring boot是一个特殊的用例,但是对于servlet 2.5中的spring应用程序,其余部分是一般用法。例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<?xml version= "1.0" encoding= "utf-8" ?>
<web-app version= "2.5" xmlns= "http://java.sun.com/xml/ns/javaee"
xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation= "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
<context-param>
<param-name>contextconfiglocation</param-name>
<param-value>demo.application</param-value>
</context-param>
<listener>
<listener- class >org.springframework.boot.legacy.context.web.springbootcontextloaderlistener</listener- class >
</listener>
<filter>
<filter-name>metricsfilter</filter-name>
<filter- class >org.springframework.web.filter.delegatingfilterproxy</filter- class >
</filter>
<filter-mapping>
<filter-name>metricsfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
|
在这个例子中,我们使用的是单个应用程序上下文(由context listener创建的)并将其连接到dispatcherservlet用一个参数初始化。这在spring boot应用程序中是很常见的(一般只有一个application context)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/rickiyeat/article/details/58156385