前言
Spring Boot項目一般都是內嵌tomcat或者jetty服務器運行,很少用war包部署到外部的服務容器,即使放到linux中,一般也是直接啟動Application類,但是有些時候我們需要部署到外部的服務器,這對于Spring Boot來說卻有點麻煩
下面就記錄下自己部署的第一個SpringBoot項目到Tomcat中遇到的問題,三個地方需要注意:頭疼……
詳細如下:
1、SpringBoot有自己內置Tomcat容器,所以要告訴它不使用內置容器,不指定Tomcat版本配置如下:
1
2
3
4
5
|
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> |
2、Application類需要如下改動,其中exclude是忽略數據庫的注解(我沒弄數據庫):
1
2
3
4
5
6
7
8
9
10
11
12
|
@SpringBootApplication (exclude = { DataSourceAutoConfiguration. class , DataSourceTransactionManagerAutoConfiguration. class , HibernateJpaAutoConfiguration. class }) 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); } } |
3、JDK版本要一直!我開始服務器用的jdk1.7,本地環境用的1.8,結果本地怎么調試運行都正常,服務器tomcat啟動正常,jsp訪問都正常,接口全部404,控制臺也沒有出現SpringBoot的標示!!!!研究了一整天……頭疼……
我的代碼:
pom.xml
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > < modelVersion >4.0.0</ modelVersion > < artifactId >wechatServer</ artifactId > < packaging >war</ packaging > < url >http://maven.apache.org</ url > <!-- Inherit defaults from Spring Boot --> < parent > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-parent</ artifactId > < version >1.4.0.RELEASE</ version > </ parent > < properties > < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding > < java.version >1.8</ java.version > </ properties > < dependencies > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-web</ artifactId > <!-- 排除內置容器,排除內置容器導出成war包可以讓外部容器運行spring-boot項目 --> </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-tomcat</ artifactId > < scope >provided</ scope > </ dependency > < dependency > < groupId >javax.servlet</ groupId > < artifactId >javax.servlet-api</ artifactId > </ dependency > < dependency > < groupId >mysql</ groupId > < artifactId >mysql-connector-java</ artifactId > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-jdbc</ artifactId > </ dependency > < dependency > < groupId >dom4j</ groupId > < artifactId >dom4j</ artifactId > < version >1.6.1</ version > </ dependency > < dependency > < groupId >com.thoughtworks.xstream</ groupId > < artifactId >xstream</ artifactId > < version >1.4.10</ version > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-devtools</ artifactId > < optional >true</ optional > <!-- optional=true,依賴不會傳遞,該項目依賴devtools;之后依賴myboot項目的項目如果想要使用devtools,需要重新引入 --> </ dependency > </ dependencies > <!--修改打包設置 --> < build > < plugins > <!-- <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> --> < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-war-plugin</ artifactId > < version >2.4</ version > < configuration > < encoding >${project.build.sourceEncoding}</ encoding > < skipTests >true</ skipTests > <!-- 打成war包時名子 --> < warName >wechatServer</ warName > <!-- mave時啟用的main路徑(因為其他包里面測試時也加了main函數) --> < mainClass >${start-class}</ mainClass > < skip >true</ skip > <!-- 跳過測試 --> < testFailureIgnore >true</ testFailureIgnore > < failOnMissingWebXml >false</ failOnMissingWebXml > </ configuration > </ plugin > </ plugins > </ build > </ project > |
Application類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package wechatService.app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication (exclude = { DataSourceAutoConfiguration. class , DataSourceTransactionManagerAutoConfiguration. class , HibernateJpaAutoConfiguration. class }) 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); } } |
Hello請求:
1
2
3
4
5
6
7
8
|
@RestController @RequestMapping public class LoginController { @RequestMapping ( "/hello/{myName}" ) String index( @PathVariable String myName) { return "Hello " +myName+ "!!!" ; } } |
application.properties我這里只配置了端口,然而部署到tomcat以后這里就不起作用了:
1
|
server.port = 80 |
我的目錄結構:
最后我的完整代碼:wechatServer.rar
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:http://blog.csdn.net/fanxiangru999/article/details/79207059