Google app engine 使用Google App Engine支持Spring框架

Google app engine 使用Google App Engine支持Spring框架,google-app-engine,spring,Google App Engine,Spring,谷歌应用程序引擎支持Spring框架吗?如果说“谷歌应用程序”实际上是指“谷歌应用程序引擎”(如标签所示),那么“大部分”。请看(我指的是缓存页面,因为“它将在应用程序引擎中播放”google groups帖子似乎正在无休止地旋转)。引述: 编辑:根据@hleinone下面的评论,“大部分”答案现在变成了“是”——Spring Security 3.x在Google App Engine上运行“开箱即用”(没有亲自尝试过,我只是相信有问题的评论!)。[[编辑结束]] Spring MVC Ver

谷歌应用程序引擎支持Spring框架吗?

如果说“谷歌应用程序”实际上是指“谷歌应用程序引擎”(如标签所示),那么“大部分”。请看(我指的是缓存页面,因为“它将在应用程序引擎中播放”google groups帖子似乎正在无休止地旋转)。引述:

编辑:根据@hleinone下面的评论,“大部分”答案现在变成了“是”——Spring Security 3.x在Google App Engine上运行“开箱即用”(没有亲自尝试过,我只是相信有问题的评论!)。[[编辑结束]]

Spring MVC
Version: 2.5.6
Status: COMPATIBLE
查看Spring的MVC框架运行情况 在应用程序引擎上,查看 autoshoppe示例应用程序。如果 您正在使用Spring表单(例如使用 spring-form.tld标记库和 子类化SimpleFormController),您可以 将需要注册自定义编辑器 为了你的财产。这包括在内 在里面

让Spring与应用程序一起工作 引擎提供的JPA接口,请遵循 在 , 其中讨论了 需要对javax.naming的依赖 @PersistenceContext。更复杂的 解决方法可在

围绕 ClassNotFoundException,可以使用 库的重新编译版本 这就增加了 StringInsensitiveComparator类-- 下载资料载于 . 看见 获取有关如何获取Spring Security的提示 使用App Engine和GWT运行(在 法语)。看见 关于整合的讨论


我所听到的是,仅仅春季启动时间就不适合谷歌应用程序引擎

真正的问题是,spring被VMWare收购,用于他们自己的云战略。他们直接与谷歌应用引擎竞争。所以不要指望情况会好转。

谷歌有一篇文章。下面是主要观点的摘要,但您有义务阅读全文

减少或避免使用组件扫描

通过不使用Spring XML配置文件中的以下配置元素来禁用组件扫描

SpringIOC使用以下XML配置来设置MovieController的成员属性

  • 打开web.xml文件
  • 创建一个部分
  • 添加一个值为contextClass的元素
  • 添加一个元素,其值指向之前创建的类
  • 使用按名称注入的相应配置如下所示:

  • 按名称定义bean而不使用构造函数注入:
  • 
    
    请澄清您的问题。你在标题中提到谷歌应用,但使用了应用引擎标签。这些是不同的东西。谷歌应用引擎现在是否支持SpringSecurityVersion4.0.0?SpringSecurity3.x将开箱即用。这些说明是针对2.x分支的。事实上,Spring Security 3.x现在可以在App Engine上开箱即用,而2.x需要修补,即使如此也只能部分发挥作用(正如@hleinone在对我答案的评论中指出的那样),这与这一论断非常矛盾,不是吗?Alex,Spring绝对有一项微妙的公关工作要做。毕竟,开发者的思维共享是他们最大的资产。但是,当你的spring应用程序在谷歌应用程序引擎中爆炸时,他们暗自窃笑(这通常归咎于谷歌),启动时间的问题使得几乎任何复杂的web框架都不适合应用程序引擎。我也不认为VMWare是一种威胁,Spring毕竟是开源的:今天在Google IO上,VMWare和Google宣布了一项以Spring编程模型、SpringSource工具套件和SpringRoo为中心的合作。这项联合工作使Spring成为Google App Engine的首选编程模型,并构成VMware开放PaaS战略的另一部分。我同意hleinone的说法……似乎coldstart时代让AppEngine(甚至还有同样存在coldstart问题的AWS)上的任何大型框架都很痛苦。您可以通过运行一些偶尔ping您的站点的东西来破解它,但这充其量只是一个解决方法:-P快速启动框架似乎最适合AppEngine…普通servlet或Node.js。。。
    Spring ORM
    Version: 2.5.6
    Status: COMPATIBLE
    
    Spring Security
    Version(s): ?
    Status: SEMI-COMPATIBLE
    
    <!-- Component scanning will significantly slow down application initialization time -->
    <context:component-scan base-package=""/>
    
    <bean id="myComponentBean" class="org.foo.MyComponent"/>
    <bean id="myOtherComponentBean" class="org.bar.MyComponent"/>
    
    @Controller
    @RequestMapping("/movie")
    public class MovieController {
      MovieDaoInterface movieDao;
      public void setMovieDao(MovieDaoInterface movieDao) {
        this.movieDao = movieDao;
      }
    }
    
    <bean class="com.example.controller.MovieController">
        <property name="movieDao" ref="movieDao"></property>
    </bean>
    <!-- movieDao is defined elsewhere in the container configuration -->
    <bean id="movieDao" class="com.example.dao.MovieDao" />
    
    <context:annotation-config />  <!-- Turn on Autowired -->
    <bean class="com.example.controller.MovieController" autowire="byType">
    </bean>
    
    import com.google.appengine.api.utils.SystemProperty;
    
    public class Custom XmlWebApplicationContext extends XmlWebApplicationContext {
             protected void init BeanDefinitionReader(XmlBeanDefinitionReader beanDefinitionReader) {
                       super.init BeanDefinitionReader(beanDefinitionReader);
                       if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
                         beanDefinitionReader.setValidating(false);
                         beanDefinitionReader.setNamespaceAware(true);
                       }
                   }
    }
    
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>com.example.CustomXmlWebApplicationContext</param-value>
    </context-param>
    
        public class Movie {
        private String name;
        private String synopsis;
    
        public Movie(String name, String synopsis) {
            this.name = name;
            this.synopsis = synopsis;
        }
    }
    
    <bean id="movie" class="example.Movie">
        <constructor-arg name="name" value="ET" />
        <constructor-arg name="synopsis" value="Help ET go home" />
    </bean>
    
    public class Movie {
        // Fields omitted
        @ConstructorProperties({"name", "synopsis"})
        public Movie(String name, String synopsis) {
            this.name = name;
            this.synopsis = synopsis;
        }
    }
    
    <bean id="movie" class="example.Movie">
        <constructor-arg index=0 value="ET" />
        <constructor-arg index=1 value="Help ET go home" />
    </bean>