今日、SpringWebアプリケーション全体をSpring3.1.1
からSpring3.2
にアップグレードしました。
Spring 3.2
を除いて、既存のアプリのほとんどの部分は壊れません。
org.springframework.ui.velocity.VelocityEngineUtils
クラスはspring-context-3.2.0.RELEASE.jarから完全に削除されているようです。
this urlのように移行ガイドを見つけました。
org.springframework.ui.velocity.VelocityEngineUtils
クラスは非推奨になったばかりですが、実際には完全に削除されています。
たぶん私は間違っているのかもしれませんが、VelocityEngineUtilsクラスがまだどこかに存在するかどうか、そうでない場合は、使用できる代替クラスは何ですか。
EDIT:速度パッケージ全体がSpring 3.2
から削除されたようですので、org.springframework.ui.velocity.VelocityEngineFactoryBean
も存在しません。春はVelocityから離れて歩いていますか?
VelocityEngineUtils
がspring-context
jarに入っていたとは思いません(GitHubによると、少なくともSpringの最後の3.1.xリリース以降はそうではありません)。
とにかく、あなたはそれをspring-context-support-3.2.0.RELEASE.jar
で見つけることができます
完全な答えを追加したかった。
まず、依存関係を追加します。
<dependency>
<groupId>org.Apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.6.4</version>
</dependency>
次に、このようなカスタムVelocityEngineFactory
がある場合。
@Bean
public VelocityEngineFactory velocityEngine(){
VelocityEngineFactoryBean bean = new VelocityEngineFactoryBean();
Properties properties = new Properties();
properties.setProperty("input.encoding", "UTF-8");
properties.setProperty("output.encoding", "UTF-8");
properties.setProperty("resource.loader", "class");
properties.setProperty("class.resource.loader.class", "org.Apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
bean.setVelocityProperties(properties);
return bean;
}
以下のようなBean定義に置き換える必要があります(あなたの@Configuration
クラス);
@Bean
public VelocityEngine velocityEngine() throws Exception {
Properties properties = new Properties();
properties.setProperty("input.encoding", "UTF-8");
properties.setProperty("output.encoding", "UTF-8");
properties.setProperty("resource.loader", "class");
properties.setProperty("class.resource.loader.class", "org.Apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
VelocityEngine velocityEngine = new VelocityEngine(properties);
return velocityEngine;
}
最後に、次のように使用します。
@Autowired
private VelocityEngine velocityEngine;
public String prepareRegistrationEmailText(User user) {
VelocityContext context = new VelocityContext();
context.put("username", user.getUsername());
context.put("email", user.getEmail());
StringWriter stringWriter = new StringWriter();
velocityEngine.mergeTemplate("registration.vm", "UTF-8", context, stringWriter);
String text = stringWriter.toString();
return text;
}
幸運を。
SpringでのVelocityEngineUtilsの非推奨に関して、Springのドキュメントでは、代わりに何を使用するかについてあまり明確ではありません。
それはただ言う:
非推奨。代わりに、mergeTemplateIntoString(VelocityEngine、String、String、Map)を使用して、独自のAPIでのVelocity1.6の対応する非推奨に従います。
さらに混乱させるために、リンクはそれ自体を参照しています。
基本的には、Velocity自体を使用すると言っているだけです。
これがあなたがそれをする方法の説明です。
// instead of a model map, you use a VelocityContext
VelocityContext velocityContext = new VelocityContext();
velocityContext.put("key1", value1);
velocityContext.put("key2", value2);
// the velocityEngine you wired into Spring has a mergeTemplate function
// you can use to do the same thing as VelocityEngineUtils.mergeTemplate
// with the exception that it uses a writer instead of returning a String
StringWriter stringWriter = new StringWriter();
velocityEngine.mergeTemplate("templateName.vm", "UTF-8", velocityContext, stringWriter);
// this is assuming you're sending HTML email using MimeMessageHelper
message.setText(stringWriter.toString(), true);
VelocityEngineUtilsはSpring> 3.2で非推奨になりました
以下の依存関係は完全に機能します
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-webmvc-velocity</artifactId>
<version>1.4.3.18.RELEASE</version>
</dependency>
Velocityを完全に廃止し、thymeleafに置き換えることをお勧めします