見出し画像

【SpringBoot1.5.x】messages.properitesをやめてmessages.ymlに移行する

もうすぐEOLになるらしい1.5系のお話です。
なかなかググっても出てこないし、やってみてもならないし、迷子になったけど、結構簡単だったというオチでした。パクったのほぼそのままでしたね。
なんでいまさらこんな話をするかと言うと、eclipseで最初開発してたんですが、最近VSCodeでし始めたら、properitesのnative2ascii問題で読めんじゃん、ってことでイラッとしただけです。
IDEによるよろしくする問題は以下のスライドで。謝辞。

解決方法

springbootのバージョンで紆余曲折しちゃいましたが、以下のstackoverflowの記事そのままでOKでした。BeanName変えたぐらい。

package jp.xxx.config;

import java.io.IOException;
import java.util.Properties;

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.io.ClassPathResource;

@Configuration
public class MessageSourceConfig {

    @Bean(name = "messagesProperties")
    public Properties yamlProperties() throws IOException {
        YamlPropertiesFactoryBean bean = new YamlPropertiesFactoryBean();
        bean.setResources(new ClassPathResource("messages.yml"));
        return bean.getObject();
    }

    @Bean
    public MessageSource messageSource() throws IOException {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setCommonMessages(yamlProperties());
        return messageSource;
    }
}

ただ、このやり方だとローカライズしたときは、、、みたいな話になりますけど、たぶんさきほど貼ったスライドの中のヒントを頼りにやる感じではないかと。
今回はローカルツールなので、ローカライズとかしません、ええ日本語オンリーです。

ちょっと注意点

っていうかYAMLに慣れてなかっただけかもしれませんが。

hoge.isntExcelFile={0}がありません。ファイルをアップロードしてから再度実行してください。

上記みたいなpropertiesファイルの記述を素直に移行すると

hoge:
  isntExcelFile: {0}がありません。ファイルをアップロードしてから再度実行してください。

こうなると思います。
が、起動時の読み込みでエラーになります。

getMessageの第二引数でオブジェクトの配列渡してメッセージと合体させるアレです。{0}ないメッセージは問題なかったので、こいつのせいです。

Failed to instantiate [java.util.Properties]: Factory method 'yamlProperties' threw exception; nested exception is while parsing a block mapping
expected <block end>, but found Scalar
 in 'reader', line 6, column 21:
      isntExcelFile: {0}がありません。ファイルをアップロードしてから再度実行してください。

置き換え文字どうするのよ・・・
って思ってましたが、ただただマルチバイト全体をダブルクォートで囲めば良いみたいです。なんだ。

isntExcelFile: "{0}がありません。ファイルをアップロードしてから再度実行してください。"

これでようやっと動きましたとさ。

ちなみに、2.x系のときは以下の記事が参考になるかと。

それでは快適なみなさんもはやめに2系に移行しましょうー

この記事が気に入ったらサポートをしてみませんか?