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