特定の環境固有の開発用の選択肢は、アプリケーションが開発から運用に移行するときに適切でないか、動作しません。
たとえば、データベース構成を検討してください。開発環境では、 あなたは、このようにテストデータをプリロード組み込みデータベースを使用する可能性が高いです:生産の設定では
@Bean(destroyMethod="shutdown")
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.addScript("classpath:schema.sql")
.addScript("classpath:test-data.sql")
.build();
}
を、 あなたはJNDIを使用して、コンテナからDataSource
を検索することもできます。
@Bean
public DataSource dataSource() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName("jdbc/myDS");
jndiObjectFactoryBean.setResourceRef(true);
jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
return (DataSource) jndiObjectFactoryBean.getObject();
}
Spring 3.1以降、プロファイルを使用できます。 Method-leve @Profile
注釈はSpring 3.2から始まります。 Spring 3.1ではクラスレベルのみです。
@Configuration
public class DataSourceConfig {
@Bean(destroyMethod="shutdown")
@Profile("development")
public DataSource embeddedDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.addScript("classpath:test-data.sql")
.build();
}
@Bean
@Profile("production")
public DataSource jndiDataSource() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName("jdbc/myDS");
jndiObjectFactoryBean.setResourceRef(true);
jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
return (DataSource) jndiObjectFactoryBean.getObject();
}
}
DataSource
豆は、それぞれのプロファイルにあり、所定のプロファイルがアクティブである場合にのみ作成されます。プロファイルが指定されていないBeanは、アクティブなプロファイルに関係なく、常に作成されます。
プロファイルに任意の論理名を付けることができます。
あなたの答えは、より明確になるだろう。また、あなたが本当に 'bean(メソッドやクラス)に注釈を付ける必要がある場合を除き、あなたのスペルをチェックすることを傷つけることはできませんでした。また、実行時環境とdev/localとproductionの違いについても言及できますか? –