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 文件。 &lt;packaging&gt;war&lt;/packaging&gt;

    将嵌入的 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.xmlspring-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-beansspring-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&lt;build&gt;标签下的war名称(如果需要避免附加war名称的版本详细信息)。

<build>
    <finalName>web-service</finalName>
.....

第 4 步:运行 maven build 以创建战争:clean install 步骤5:将生成的war文件web-service.war部署到tomcat中,并在浏览器中请求urlhttp://&lt;tomcat ip&gt;:&lt;tomcat port&gt;/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 使用来自ApplicationContextpersistence.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应用部署在服务器,数据库也在服务器上(不是同一个服务器),访问时 时快时慢,代码网速没问题。的主要内容,如果未能解决你的问题,请参考以下文章

多线程在javaweb中的应用

如何将APP部署在阿里云服务器上?

我是不是需要在 Web 服务器上安装 MVC 3/4 才能运行 mvc 应用程序

Linux系统——将web应用部署到tomcat服务器上

使用数据库连接将代码部署到 Azure Web 时,Flask 应用程序无法呈现,但在本地服务器上工作正常

web前端项目部署到服务器: