Google App Engine上的Spring MVC和REST

前段时间,我写了一篇关于如何使用Spring MVC实现Restful Web API的文章 。 阅读我以前的文章以了解它。

在那篇文章中,开发了一个简单的Rest示例。 为了测试该应用程序,将文件复制到Web服务器(例如Tomcat )中,然后返回对字符1的http:// localhost:8080 / RestServer / characters / 1信息的访问。

在当前文章中,我将解释如何将应用程序转换为Google App Engine并使用Maven部署到Google的基础架构中。 当然,在这种情况下,我们将部署Rest Spring MVC应用程序,但是可以使用相同的方法将Spring MVC Web应用程序(或使用其他Web框架开发的任何其他应用程序)迁移到GAE。

首先,显然,您应该创建一个Google帐户并注册一个新的应用程序 (记住名称,因为它将在下一步中使用)。 之后,您可以开始迁移。

需要进行三个更改,创建定义应用程序名称的appengine-web.xml ; 使用Google帐户信息将服务器标记添加到settings.xml,并修改pom.xml以添加GAE插件及其依赖项。

让我们从appengine-web.xml开始。 GAE使用此文件来配置应用程序,并将其创建到WEB-INF目录(与web.xml处于同一级别)。



    alexsotoblog
    1

    
        
    
    false
    true

最重要的字段是应用程序标签。 此标记包含我们应用程序的名称(在您注册新的Google应用程序时定义)。

其他标签包括版本,系统属性和环境变量以及其他配置,例如您是否希望预编译以提高性能或应用程序需要会话。

而且您的项目不再需要修改,现在仅会触摸Maven文件。

settings.xml中 ,应该添加帐户信息:


  /media/share/maven_repo
  
        
            appengine.google.com
            [email protected]
            my_password
        

    
  

看到这和在Maven中注册任何其他服务器一样容易。

最后是最繁琐的部分,修改pom.xml

首先要添加新属性:

/media/share/maven_repo/com/google/appengine/appengine-java-sdk/1.5.5/appengine-java-sdk-1.5.5
alexsotoblog
0.9.0
1.5.5


test

在第一行中,我们定义了Appengine Java SDK的位置。 如果已经安装,则在此标记中插入位置,如果没有,则复制此pom的相同位置,然后将maven存储库目录(在我的情况下为/ media / share / maven_repo)更改为您的目录。 通常,您的Maven存储库位置为/home/user/.m2/repositoriesMaven将在部署时为您下载SDK

下一步是添加Maven GAE存储库。


 
  maven-gae-plugin-repo
  http://maven-gae-plugin.googlecode.com/svn/repository
  maven-gae-plugin repository
 



 
  maven-gae-plugin-repo
  Maven Google App Engine Repository
  http://maven-gae-plugin.googlecode.com/svn/repository/
 

因为我们的项目是虚拟项目, 所以不使用Datanucleus 。 对于更复杂的项目,需要使用例如JDO进行数据库访问,应添加下一个依赖项:


 javax.jdo
 jdo2-api
 2.3-eb
 
  
   javax.transaction
   transaction-api
  
 



 com.google.appengine.orm
 datanucleus-appengine
 1.0.6.final



 org.datanucleus
 datanucleus-core
 1.1.5
 runtime
 
  
   javax.transaction
   transaction-api
  
 



 com.google.appengine
 geronimo-jta_1.1_spec
 1.1.1
 runtime




 com.google.appengine
 geronimo-jpa_3.0_spec
 1.1.1
 runtime

如果您使用的是Datanucleus ,则应注册maven-datanucleus-plugin 。 请注意根据您的项目正确配置它。


            org.datanucleus
            maven-datanucleus-plugin
            1.1.4
            
                
                **/model/*.class
                true
                ASM
                JDO
            
            
                
                    compile
                    
                        enhance
                    
                
            
            
                
                    org.datanucleus
                    datanucleus-core
                    1.1.5
                    
                        
                            javax.transaction
                            transaction-api
                        
                    
                
                
                    org.datanucleus
                    datanucleus-rdbms
                    1.1.5
                
                
                 org.datanucleus
                 datanucleus-enhancer
                1.1.5
           
       

现在,添加了Google App Engine依赖项。


 com.google.appengine
 appengine-api-1.0-sdk
 ${gae.version}



 com.google.appengine
 appengine-tools-api
 1.3.7

然后,如果您想测试GAE 功能 (在我们的虚拟项目中未使用),则添加下一个GAE库:


 com.google.appengine
 appengine-api-labs
 ${gae.version}
 test



 com.google.appengine
 appengine-api-stubs
 ${gae.version}
 test



 com.google.appengine
 appengine-testing
 ${gae.version}
 test

接下来的更改是对maven-war-plugin的修改,其中将appengine-web.xml包含到生成的包中:


 org.apache.maven.plugins
 maven-war-plugin
 
  
   
    src/main/webapp
    true
    
     **/appengine-web.xml
    
   
  
 

最后添加maven-gae-plugin并将其配置为将应用程序上传到appspot


 net.kindleit
 maven-gae-plugin
 ${gaePluginVersion}
 
  appengine.google.com
 
 
  
   net.kindleit
   gae-runtime
   ${gae.version}
   pom
  
 

看到标记包含先前在settings.xml文件中定义的服务器名称。

另外,如果您使用的是maven-release-plugin ,则可以在release:perform目标期间将应用程序自动上传到appspot


        org.apache.maven.plugins
        maven-release-plugin
        2.2.1
        
              gae:deploy
        

现在运行gae:deploy目标。 如果您已经安装了Appengine Java SDK ,那么您的应用程序将被上传到您的GAE网站。 但是,如果这是您第一次运行该插件,则会收到错误消息。 不要惊慌,发生此错误是因为Maven插件未在您在标记中指定的目录中找到Appengine SDK 。 但是,如果您已将gae.home位置配置到本地Maven存储库中,只需运行gae:unpack目标,即可正确安装SDK ,因此当您重新运行gae:deploy时,您的应用程序将上传到Google基础架构中。

在后例子中,你可以去http://alexsotoblog.appspot.com/characters/1http://alexsotoblog.appspot.com/characters/1和JSON格式字符信息显示到浏览器中。

正如我在文章开头提到的那样,相同的过程可以用于任何Web应用程序,而不仅仅是Spring Rest MVC

由于教学目的,对应用程序pom进行了所有修改。 我的建议是,您要使用GAE相关标签创建父pom ,因此必须上传到Google App Engine的每个项目都来自同一pom文件。

我希望您发现这篇文章有用。

本周,我在devoxx ,在那与我见面;)我将在17日(星期四)13:00发表有关通过聚合和最小化加速Javascript和CSS下载时间的演讲 。

完整的pom文件:



 4.0.0
 org.springframework
 rest
 Rest
 war
 1.0.0-BUILD-SNAPSHOT
 
  1.6
  3.0.4.RELEASE
  1.6.9
  1.5.10
  

  /home/alex/.m2/repository/com/google/appengine/appengine-java-sdk/1.5.5/appengine-java-sdk-1.5.5
  alexsotoblog
  0.9.0
  1.5.5

  
  test
 
 

  
  
   com.sun.xml.bind
   jaxb-impl
   2.2.4-1
  
  
   org.codehaus.jackson
   jackson-core-lgpl
   1.8.5
  
  
   org.codehaus.jackson
   jackson-mapper-lgpl
   1.8.5
  

  
  
   com.google.appengine
   appengine-api-labs
   ${gae.version}
   test
  

  
   com.google.appengine
   appengine-api-stubs
   ${gae.version}
   test
  

  
   com.google.appengine
   appengine-testing
   ${gae.version}
   test
  


  
   com.google.appengine
   appengine-api-1.0-sdk
   ${gae.version}
  

  
   com.google.appengine
   appengine-tools-api
   1.3.7
  

  
  
   org.springframework
   spring-context
   ${org.springframework-version}
   
    
    
     commons-logging
     commons-logging
    
   
  
  
   org.springframework
   spring-webmvc
   ${org.springframework-version}
  
  
   org.springframework
   spring-oxm
   ${org.springframework-version}
  

  
  
   org.aspectj
   aspectjrt
   ${org.aspectj-version}
  

  
  
   org.slf4j
   slf4j-api
   ${org.slf4j-version}
  
  
   org.slf4j
   jcl-over-slf4j
   ${org.slf4j-version}
   runtime
  
  
   org.slf4j
   slf4j-log4j12
   ${org.slf4j-version}
   runtime
  
  
   log4j
   log4j
   1.2.15
   
    
     javax.mail
     mail
    
    
     javax.jms
     jms
    
    
     com.sun.jdmk
     jmxtools
    
    
     com.sun.jmx
     jmxri
    
   
   runtime
  

  
  
   javax.inject
   javax.inject
   1
  

  
  
   javax.servlet
   servlet-api
   2.5
   provided
  
  
   javax.servlet.jsp
   jsp-api
   2.1
   provided
  
  
   javax.servlet
   jstl
   1.2
  

  
  
   junit
   junit
   4.7
   test
  

 
 
  
  
   org.springframework.maven.snapshot
   Spring Maven Snapshot Repository
   http://maven.springframework.org/snapshot
   
    false
   
   
    true
   
  
  
  
   org.springframework.maven.milestone
   Spring Maven Milestone Repository
   http://maven.springframework.org/milestone
   
    false
   
  
  
  
   maven-gae-plugin-repo
   http://maven-gae-plugin.googlecode.com/svn/repository
   maven-gae-plugin repository
  
 

 
  
   maven-gae-plugin-repo
   Maven Google App Engine Repository
   http://maven-gae-plugin.googlecode.com/svn/repository/
  
 

 
  
   
    org.apache.maven.plugins
    maven-compiler-plugin
    
     ${java-version}
     ${java-version}
    
   

   
   
    org.apache.maven.plugins
    maven-war-plugin
    
     
      
       src/main/webapp
       true
       
        **/appengine-web.xml
       
      
     
     abc
    
   
   
    org.apache.maven.plugins
    maven-dependency-plugin
    
     
      install
      install
      
       sources
      
     
    
   
   
    org.codehaus.mojo
    aspectj-maven-plugin
    
    1.2
    
     
     
      org.aspectj
      aspectjrt
      ${org.aspectj-version}
     
     
      org.aspectj
      aspectjtools
      ${org.aspectj-version}
     
    
    
     
      
       compile
       test-compile
      
     
    
    
     true
     ${java-version}
     ${java-version}
    
   
   
    org.apache.maven.plugins
    maven-surefire-plugin
    
     junit:junit
    
   
   
    org.codehaus.mojo
    tomcat-maven-plugin
    1.0-beta-1
   
   
   
    net.kindleit
    maven-gae-plugin
    ${gaePluginVersion}
    
     appengine.google.com
    
    
     
      net.kindleit
      gae-runtime
      ${gae.version}
      pom
     
    
   
  
 

下载代码。
音乐: http : //www.youtube.com/watch?v = Nba3Tr_GLZU

参考:来自JCG合作伙伴 Alex Soto 在Google App Engine上的Spring MVC和REST,来自One Jar To Rule All All博客。

相关文章 :

  • 使用Spring MVC开发Restful Web服务
  • Spring MVC开发–快速教程
  • jqGrid,REST,AJAX和Spring MVC集成
  • 使用Spring 3.1和基于Java的配置构建RESTful Web服务,第2部分
  • Spring MVC3 Hibernate CRUD示例应用程序
  • Google AppEngine(GAE)中的多租户

翻译自: https://www.javacodegeeks.com/2011/12/spring-mvc-and-rest-at-google-app.html

你可能感兴趣的:(java,maven,spring,linux,spring,boot)