web应用部署在服务器,数据库也在服务器上(不是同一个服务器),访问时 时快时慢,代码网速没问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web应用部署在服务器,数据库也在服务器上(不是同一个服务器),访问时 时快时慢,代码网速没问题。相关的知识,希望对你有一定的参考价值。
web应用部署在本地,则页面快速稳定。而且那个快慢是时间点a快 b慢 ,在另一个时间点可能相同或相反。IIS、SQL都重启过,硬件也没问题,而且服务器上只运行了一个应用就是部署的这个,请大家帮忙解决下啊
参考技术A 根据实际情况而定,你这中情况估计是服务器与服务器之间的连接不稳定,得多次检查。如何在tomcat服务器上部署spring boot web应用
【中文标题】如何在tomcat服务器上部署spring boot web应用【英文标题】:How to deploy spring boot web application on tomcat server 【发布时间】:2016-04-03 01:57:19 【问题描述】:我已经创建了 Spring Boot Web 应用程序,但我无法在 tomcat 上部署 Spring Boot Web 应用程序 WAR 文件,我可以将它作为 Java 应用程序运行。如何在 tomcat 上将 Spring Boot 应用程序作为 Web 服务运行。我正在使用以下代码。如果可以在 tomcat 上运行,请帮助我在不使用 web.xml 和使用 web.xml 的情况下使用注释。
@SpringBootApplication
public class Application extends SpringBootServletInitializer
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(Application.class);
public static void main(String[] args) throws Exception
SpringApplication.run(Application.class, args);
休息控制器的以下代码
@RestController
public class HelloWorld
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ResponseEntity<String> get()
return new ResponseEntity<String>("Hello World", HttpStatus.OK);
按照我正在使用的 Pom.xml
<groupId>org.springframework</groupId>
<artifactId>web-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.6</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
<packaging>war</packaging>
【问题讨论】:
如果我导出为jar,我无法在远程tomcat中部署,也无法从浏览器调用这个应用程序 为什么你需要一个单独的 tomcat 来从浏览器访问应用程序。spring boot 本身包含嵌入式服务器 如果你还需要它作为战争,看我的回答 【参考方案1】:这里有两个很好的文档,介绍了如何将 Spring Boot
应用程序部署为 war
文件。
你可以关注这个spring boot howto-traditional-deployment文档——
根据本文档的步骤 -
您更新应用程序的主类以扩展 SpringBootServletInitializer
。
下一步是更新您的构建配置,以便您的项目生成一个 war 文件而不是 jar 文件。 <packaging>war</packaging>
将嵌入的 servlet 容器依赖项标记为已提供。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
还有一种方法-
请参阅此spring io documentation,其中概述了如何将 Spring Boot 应用程序部署到应用程序服务器。
步骤 -
将jar
包装更改为war
。
注释掉pom.xml
中spring-boot-maven-plugin
插件的声明
通过扩展 SpringBootServletInitializer
并覆盖 configure
方法,将 Web 入口点添加到您的应用程序中
删除 spring-boot-starter-tomcat dependency
并将您的 spring-boot-starter-web
依赖项修改为
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
在您的 pom.xml
中,删除 spring-beans
和 spring-webmvc
依赖项。 spring-boot-starter-web
依赖将包括这些依赖。
【讨论】:
我做了你所说的改变,但是它抛出选择不能在服务器上运行意味着它没有识别战争。 好的。这是另一个 Spring Boot 传统部署文档 - docs.spring.io/spring-boot/docs/current/reference/html/…。你可以试试这个方法! 有没有办法让部分 POM 以生命周期为条件? 战争而不是罐子有什么好处?请检查这个问题:***.com/questions/43303849/…【参考方案2】:Spring boot 提供了将应用程序部署为servlet 3.x
(无 web.xml)支持 tomcat 服务器的传统 war 文件的选项。请参阅spring boot documentation 了解这一点。我将在这里简要介绍您需要做的事情。
第 1 步:修改pom.xml
以将包装更改为war:(您已经这样做了)
<packaging>war</packaging>
第 2 步:更改您的依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
到
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
第三步:修改pom.xml
中<build>
标签下的war名称(如果需要避免附加war名称的版本详细信息)。
<build>
<finalName>web-service</finalName>
.....
第 4 步:运行 maven build 以创建战争:clean install
步骤5:将生成的war文件web-service.war
部署到tomcat中,并在浏览器中请求urlhttp://<tomcat ip>:<tomcat port>/web-service/hello
你应该得到Hello World
。
注意:您也可以像@Ali Dehghani 所说的那样删除多余的依赖项。
【讨论】:
我得到的选择不能在任何服务器上运行。 你是从 Eclipse 运行的? 是的。我在 Eclipse 中运行。 你能ping我你的号码吗【参考方案3】:将spring-boot-starter-tomcat
依赖标记为provided
,例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
注意1:从您的pom.xml
中删除多余的依赖项,例如:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
它们是 spring boot 启动包的一部分
注意2:让jar不是战争
【讨论】:
如果我制作为jar,我无法部署在远程tomcat服务器上,因此无法从网络浏览器调用。 您可以在 linux 中将 spring boot 应用程序作为服务安装,或者我猜是 windows 和 mac。我要说的是下一次更多地考虑如何部署 Java 应用程序(或任何应用程序,就此而言)。这种应用部署的端口绑定风格有很多优点,并且更符合当今的最佳实践 我知道有时我们不得不走这条路,因为一些疯狂的企业文化 如何使用应用即服务。在远程 tomcat 服务器 WAR 文件选项中只有一件事【参考方案4】:将 Spring Boot jar 转换为 Spring Boot War 的过程记录在:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging 长话短说,按照您在示例中所做的方式设置您的入门类,然后在 .pom 文件中将打包从 jar 切换为 war。此外,您需要将 spring-boot-starter-tomcat 依赖项设置为提供。再一次,该过程以完整的形式记录在上面的链接中。 有关此主题的更多信息,请参阅 spring io 指南“将 Spring Boot JAR 应用程序转换为 WAR”,该指南位于 https://spring.io/guides/gs/convert-jar-to-war/ 如果我能提供任何进一步的帮助,请告诉我,我会帮助你。
【讨论】:
【参考方案5】:我遇到了这个问题。以上大部分内容都是很好的建议。我的问题是最初部署在 Pivotal TC 服务器上。
使 pom 中的包装成为 WAR。
<packaging>war</packaging>
向 pom 添加依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
我使用了一个 Application 类来保存 main()。
Main 具有配置代码,以便可以注入 EntityManager
等。此EntityManager
使用来自ApplicationContext
和persistence.xml
文件的信息作为持久性信息。在 SpringBoot 下工作正常,但在 Tomcat 下不行。事实上,在 Tomcat 下,Main()
没有被调用。 Application 类扩展了SpringBootServletInitializer
。
Application 类中添加了以下方法:
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
Application obj = new Application();
@SuppressWarnings("resource")
ConfigurableApplicationContext applicationContext =
new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
applicationContext.registerShutdownHook();
applicationContext.getBeanFactory().autowireBeanProperties(
obj, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
return application.sources(Application.class);
只需要最后一行 - 其他代码之前保存在 main()
中,并被移到此处以注入 EntityManager
工作。
需要的注解是:
@EnableAutoConfiguration
@ComponentScan
//@SpringBootApplication will consist of both of these and @Configuration
一些 url 现在可能需要更改根上下文以包含
<artifactId>contextname</artifactId>.
希望有帮助
【讨论】:
以上是关于web应用部署在服务器,数据库也在服务器上(不是同一个服务器),访问时 时快时慢,代码网速没问题。的主要内容,如果未能解决你的问题,请参考以下文章
我是不是需要在 Web 服务器上安装 MVC 3/4 才能运行 mvc 应用程序