読者です 読者をやめる 読者になる 読者になる

プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

spring bootでapplication.propertiesにオリジナルのプロパティを作ったときに"'xx' is an unknown property."が出るときの対処方法

spring bootで複数のDataSourceにアクセスするサンプルを書いていたのですが、
http://docs.spring.io/spring-boot/docs/1.2.0.BUILD-SNAPSHOT/reference/htmlsingle/#howto-two-datasources
を参考にまあ普通に出来ました。

しかしその際、application.propertiesに標準には存在しないプロパティを設定したため、STSのapplication.propertiesの編集画面で、

"'datasource.primary.url' is an unknown property."

という警告が表示されました。
書いたapplication.propertiesは下記の通りです。

datasource.primary.url = jdbc:h2:~/test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
datasource.primary.username = sa
datasource.primary.password =

datasource.secondary.url = jdbc:h2:~/test2;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
datasource.secondary.username = sa
datasource.secondary.password =

これを回避するには、META-INF/spring-configuration-metadata.json
というファイルを作成します。実際のファイルは下記の通りです。

{
	"groups": [
		{
			"name": "datasource.primary",
			"type": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties",
			"sourceType": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"
		},
		{
			"name": "datasource.secondary",
			"type": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties",
			"sourceType": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"
		}
	],
	"properties": [
		{
			"name": "datasource.primary.url",
			"type": "java.lang.String",
			"description": "JDBC url of the database.",
			"sourceType": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"
		},
		{
			"name": "datasource.primary.username",
			"type": "java.lang.String",
			"description": "Login user of the database.",
			"sourceType": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"
		},
		{
			"name": "datasource.primary.password",
			"type": "java.lang.String",
			"description": "Login password of the database.",
			"sourceType": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"
		},
		{
			"name": "datasource.secondary.url",
			"type": "java.lang.String",
			"description": "JDBC url of the database.",
			"sourceType": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"
		},
		{
			"name": "datasource.secondary.username",
			"type": "java.lang.String",
			"description": "Login user of the database.",
			"sourceType": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"
		},
		{
			"name": "datasource.secondary.password",
			"type": "java.lang.String",
			"description": "Login password of the database.",
			"sourceType": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties"
		}
	]
}

これらのプロパティは、標準プロパティのspring.datasource.xxと同じですが、どこかに定義されているはず、ということで色々漁って見つけました。
spring-boot-autoconfigure-x.y.z.RELEASE.jarのMETA-INF/spring-configuration-metadata.jsonにあります。

実際設定できるプロパティは、url, username, passwordだけではありませんので、他のプロパティも必要に応じてspring-configuration-metadata.jsonに定義してあげると良いかも知れませんね。